PHP Session的工作原理和存储机制
Session 是通过一个名为 PHPSESSID 的 Cookie 来和服务器取得联系的,Session 通过 sessionID(PHPSESSID 的值)来找到对应服务器中 Session 的文件名。
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 参数来决定会话文件分布的目录深度,例如设定为
此外,如果使用了 N 参数并且大于 0,那么将不会执行自动垃圾回收。文件储存模块默认使用 mode 600 创建文件。通过修改可选参数 MODE 来改变这种默认行为:
使用以上描述的可选目录层级参数 N 时请注意,对于绝大多数站点,大于 1 或者 2 的值会不太合适——因为这需要创建大量的目录。例如,值设置为 3 需要在文件系统上创建 64^3 个目录,将浪费很多空间和 inode。仅仅在绝对肯定站点足够大时才可以设置 N 大于 2。
一个 Session 文件的内容如下:
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 名 | 值类型 : 长度 : 值;
所有教程
- C语言入门
- C语言编译器
- C语言项目案例
- 数据结构
- C++
- STL
- C++11
- socket
- GCC
- GDB
- Makefile
- OpenCV
- Qt教程
- Unity 3D
- UE4
- 游戏引擎
- Python
- Python并发编程
- TensorFlow
- Django
- NumPy
- Linux
- Shell
- Java教程
- 设计模式
- Java Swing
- Servlet
- JSP教程
- Struts2
- Maven
- Spring
- Spring MVC
- Spring Boot
- Spring Cloud
- Hibernate
- Mybatis
- MySQL教程
- MySQL函数
- NoSQL
- Redis
- MongoDB
- HBase
- Go语言
- C#
- MATLAB
- JavaScript
- Bootstrap
- HTML
- CSS教程
- PHP
- 汇编语言
- TCP/IP
- vi命令
- Android教程
- 区块链
- Docker
- 大数据
- 云计算