一、Session工作原理
http协议是WEB服务器与客户端(浏览器)相互通信的协议,它是一种无状态协议,服务器响应完之后就失去了与浏览器的联系。所谓无状态,指的是不会维护http请求数据,http请求是独立的,不持久的。而越来越复杂的WEB应用,需要保存一些用户状态信息。这时候,Session这种方案应需而生。PHP从4.1开始支持Session管理。
session的工作原理:用户在客户端登陆网站时,被访问的PHP页面使用session_start()函数启动session,产生客户端唯一标识session_id(使用函数session_id()设置),当请求下一个页面时,PHP程序通过两种方式来获取客户端的session_id:一种是将session_id自动加入到GET或POST的URL中,默认情况下,变量名为PHPSESSD(在php.ini中的设置session name=PHPSESSD);另一种方式是通过cookie,将session_id 保存在cookie中,如下图所示的红色框,客户端的PHPSESSID的值与服务端的sess_后缀的值是相等的。由此可以看出,服务端产生客户端唯一标志的sessionid。
客户端:
服务端:
保存在服务器端的session数据,不是保存在服务器端的内存中,而是保存在文件或数据库中。默认情况下配置服务器端的php设置(php.ini),通过文件的方式保存(session save_hander=files),使用读写文件的方式保存session数据,session文件保存的目录由session save_path指定,如:文件名为 sess_c72665af28a8b14c0fc61afeb59b51b,文件中的数据即是序列化之后的session数据,如果访问量大,还可能产生多个session文件,这时可以设置分级目录保存session文件
session save_path="N;/save_path"(N为分级的级数,save_path为开始目录)。对session数据写入时,PHP获得客户端的session d,然后跟随session d到指定的session文件保存目录中找到相应的session文件,不存在则创建,最后将数据序列化之后写入文件。读取session数据是类似的流程,对读出来的数据需要进行解序列化,生成相应的session变量
用户在浏览网页时&#x