❶ 详解Session
Session是服务器端用来维护客户端会话状态的一种机制,与Cookie类似,但针对HTTP协议的局限性设计。它常用于传递页面变量、用户认证和程序状态记录,如保持登录状态或记录购物车信息。
启用Session前需使用session_start()函数,务必在开始前避免输出任何内容,否则会出现警告。php.ini中可以设置session.auto_start为1自动开启Session。通过$_SESSION[]操作设置和获取Session,每次请求会附带一个PHPSESSID的Cookie,值为一个32位的16进制字符串,浏览器刷新时会重新生成。
Session的工作原理依赖于一个PHPSESSID的cookie,通过sessionID与服务器上的session文件关联。sessionID在HTTP请求和响应中传输,生成时确保唯一性和随机性。默认情况下,Session文件存储在服务器硬盘,通过session.save_path设置路径,可以自定义存储方式,如使用Redis存储以提高性能,减少I/O操作。
例如,可以编写一个自定义session保存函数,如session_set_save_handler,通过Redis存储。如sessionmanager类,定义open、close、read、write、destroy和gc等回调函数,分别对应会话的初始化、关闭、读取、写入、销毁和垃圾回收操作。将session数据以键值对的形式存储在Redis中,使用sessionID作为键,值为序列化后的数据。
在实践中,创建和访问Session的脚本,如set.php设置Session,get.php获取Session内容,可以看到在Redis中存储的session数据,形式与文件存储类似,但键值对中的字符串做了转义。