session与cookie的工作原理及工作过程总结
本博客的所有文章只作为本人日常学习的总结,如有不足请指正。
session与cookie保存数据的方式
session与cookie一般用来存储用户的账号密码。笼统的来说,session是将用户信息保存在服务端,将session_id的口令存储于客户端,每次用户请求服务端时则携带口令。
而cookie则将用户信息存储在客户端,每次用户发起http请求时,cookie被设置在http请求的头部一起被发送给服务器。session与 cookie的工作原理
2.1、cookie工作原理
当用户请求浏览器时,客户端则将用户的数据信息以cookie的形式保存在客户端。当浏览器请求服务器时,系统将cookie信息以及用户将要进行的操作以及操作参数等数据以http header的形式存储在http request 信息中,当服务器接收到request信息后,会将各个参数保存在超全局数组COOKIE中。如果客户端cookie信息发生改变,在一次发送request信息时,超全局数组_COOKIE的值还未改变,所以如果将发送的cookie值和COOKIE的值打印出来可以看到,cookie为改变后的值,而_COOKIE中的值还是之前设置的值,但如果此次更改执行结束后再查看,$_COOKIE中的值已经改变。2.2、 session工作原理
第一次客户端向服务器发送http request信息后,服务器会检查是否有携带session_id信息,如果未携带则生成一个session_id信息并存放在超全局数组COOKIE中,同时生成一个sessionid的文件,通过服务器端的输出缓冲区中的setcookie将sessionid设置在客户端。当客户端再次请求服务器的时候,服务器会检查到已经携带了口令sessionid,便会将相对应的session信息写入到超全局数组_SESSION中, 然后通过携带的session_id 去 查找对应的session_id文件,程序执行结束后再将$_SESSION 保存到session_id文件中。session_start()的启动时机
浏览器 => http request (cookie) => nginx =>php-fpm =>php =>php将对GET、POST、COOKIE信息进行解析,赋值到超全局数组中=> 解析 .php 脚本 => session_start() =>cookie中查询session_id => 通过这个session_id 读取相对应的session_id 文件(若session_id不存在,则设置并生成相对应的session_id 文件) => 创建并赋值给SESSION=>用户的session=>程序运行结束后将_SESSION中的数据保存到session_id文件中- session与cookie的区别联系
二者都是用来存储用户的上下文信息的,session将信息存储在服务端,cookie将信息存储在客户端,session 相对要比cookie更加的安全。二者看似独立,但在session中,其工作依赖于cookie,session_id 从服务端到客户端的传递都是由系统自动调用cookie来完成的。