Session 存储在服务端,本质上和 Cookie 没有区别,都是针对 HTTP 协议的局限性而提出的一种保持客户端和服务端间会话状态的机制。
Session 经常用来在网站的上下文间实现页面变量的传递、用户身份认证、程序状态记录等,常见的有配合 Cookie 使用、实现保存用户的登录状态或者记录用户的购物下单信息等。
在使用 Session 之前必须先开启 Session,可使用 session_start() 开启 Session,同 Cookie 一样,在开始之前不能有任何输出内容,否则会出现如下警告:
也可以修改 php.ini 中的session.auto_start=0为session.auto_start=1,设置自动开启 Session 支持,这样就不必每次在使用 Session 的时候都加上 session_start() 了。
Session 的设置非常简单,可以直接使用以下形式:
其中 key 表示 Session 的键,所有设置的 Session 都存储在全局数组 $_SESSION 中。
当在代码中设置了 Session 时,在 HTTP 请求的消息头中会携带一个名为 PHPSESSID 的 Cookie,其值是一个 32 位十六进制的字符串。每个客户端向服务器请求时都会产生一个不同的值,如果清除浏览器的 Cookie,再次刷新页面时将会重新设置一个 PHPSESSID 的值。
服务端接收到这个 Cookie,根据其值在服务器中找到对应的 Session 文件,从而实现保持与客户端链接状态的信息,其中 Session 中存储着序列化的 Session 键值等信息。
设置了 Session 的 HTTP 请求消息头如下:
如果读者想深入学习 Session,可以继续阅读: