PHP会话是如何工作的?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (15)

会话文件通常存储在/tmp/服务器上,并被命名sess_{session_id}。我一直在看内容,无法弄清楚他们是如何工作的。

从文件中获取变量名称和内容很容易。但PHP如何知道会话属于谁?

session_id看起来完全是随机的,一个IP地址可以有多个用户,如果有多个浏览器窗口打开,每个用户可以有多个会话。

那么它是怎样工作的?

提问于
用户回答回答于

在一般情况下:

  • 当会话被创建时会话ID被发送给用户。
  • 它存储在一个cookie中(默认情况下称为PHPSESSID
  • 该cookie由浏览器发送到每个请求的服务器
  • 服务器(PHP)使用包含session_id的cookie来知道哪个文件对应于该用户。

会话文件中的数据是$_SESSION序列化的内容; 并在PHP加载该文件时解除序列化,以填充该$_SESSION数组。

有时,会话ID并不存储在cookie中,而是以URL的形式发送 - 但这在当今非常罕见。

用户回答回答于

PHP会话如何工作

  • 首先,PHP a86b10aeb5cd56434f8691799b1d9360为单个会话创建一个16字节长的唯一标识号(存储为32个十六进制字符串,例如)。
  • PHPSESSID cookie将该唯一标识号传递给用户的浏览器以保存该号码。
  • 在服务器上创建一个新文件,其中带有与sess_前缀(即sess_a86b10aeb5cd56434f8691799b1d9360。)相同的唯一标识号的名称
  • 浏览器会在每次请求时将该cookie发送到服务器。
  • 如果PHP从PHPSESSID cookie(每个请求)获取该唯一标识号,则PHP会在临时目录中搜索并将该号码与文件名进行比较。如果两者相同,则它检索现有会话,否则会为该用户创建一个新会话。

会话在用户关闭浏览器或离开网站时被破坏。服务器也会在预定的会话时间到期后终止会话。这些是PHP用来处理会话的简单机制步骤。

扫码关注云+社区