sessionID 是在客户端和服务端通过 HTTP Requset 和 HTTP Response 传来传去的。sessionID 按照一定的算法生成,保证其值的唯一性和随机性。
Cookie 里存储着 Session 的 sessionID 和 Session 的生存期,如果没有设置 Session 的生存期,则 sessionID 存储在内存中,关闭浏览器时 Session 失效,重新请求页面时会重新注册一个 sessionID。
默认情况下,Session 是存储在服务器硬盘上的,在 php.ini 中可通过 session.save_path 设置 Session 文件的存储路径,默认为服务器上的 /tmp 目录。
session.save_path 配置指令还有一个可选的 N 参数来决定会话文件分布的目录深度,例如设定为'5;/tmp'
将使创建的会话文件和路径类似于下面的形式:
/tmp/4/b/1/e/3/sess_4b1e384ad74619bd212e236e52a5a174If
要使用 N 参数,必须在使用前先创建好这些目录。在 ext/session 目录下有个小的 shell 脚本,即 mod_files.sh。Windows 版本下的 mod_files.bat 可以用来做这件事。
此外,如果使用了 N 参数并且大于 0,那么将不会执行自动垃圾回收。文件储存模块默认使用 mode 600 创建文件。通过修改可选参数 MODE 来改变这种默认行为:
N;MODE;/path
其中,MODE 是 mode 的八进制表示。
使用以上描述的可选目录层级参数 N 时请注意,对于绝大多数站点,大于 1 或者 2 的值会不太合适——因为这需要创建大量的目录。例如,值设置为 3 需要在文件系统上创建 64^3 个目录,将浪费很多空间和 inode。仅仅在绝对肯定站点足够大时才可以设置 N 大于 2。
一个 Session 文件的内容如下:
siteadmin_username|s:7:"special";siteadmin_truename|s:6:"特殊";siteadmin_usertype|i:1;
内容的格式为:
session 名 | 值类型 : 长度 : 值;
原创文章,作者:奋斗,如若转载,请注明出处:https://blog.ytso.com/23359.html