PHP 会话如何工作?(不是“如何使用它们?
会话文件通常存储在服务器上,并命名为 。我一直在看内容,无法弄清楚它们是如何工作的。/tmp/
sess_{session_id}
从文件中获取变量名称和内容很容易。但是PHP如何知道哪个会话属于谁呢?
session_id似乎完全随机,一个IP地址可以有多个用户,如果每个用户打开了多个浏览器窗口,则每个用户可以有多个会话。
那么它是如何工作的呢?
会话文件通常存储在服务器上,并命名为 。我一直在看内容,无法弄清楚它们是如何工作的。/tmp/
sess_{session_id}
从文件中获取变量名称和内容很容易。但是PHP如何知道哪个会话属于谁呢?
session_id似乎完全随机,一个IP地址可以有多个用户,如果每个用户打开了多个浏览器窗口,则每个用户可以有多个会话。
那么它是如何工作的呢?
在一般情况下:
PHPSESSID
)会话文件中的数据是 的内容,序列化(即,表示为字符串 - 具有诸如序列化之类的函数);并在 PHP 加载文件时取消序列化,以填充数组。$_SESSION
$_SESSION
有时,会话ID不会存储在cookie中,而是以URL形式发送 - 但现在这种情况非常罕见。
有关详细信息,您可以查看手册的会话处理部分,其中提供了一些有用的信息。
例如,有一个关于传递会话ID的页面,它解释了如何使用cookie或在URL中从一个页面传递会话ID-以及哪些配置选项会影响这一点。
PHP 会话如何工作
首先,PHP为单个会话创建一个16字节长的唯一标识符号(存储为32个十六进制字符的字符串,例如)。a86b10aeb5cd56434f8691799b1d9360
PHPSESSID cookie 将该唯一标识号传递给用户的浏览器以保存该数字。
在服务器上创建一个新文件,该文件具有唯一标识号的相同名称,并带有sess_前缀(即 .sess_a86b10aeb5cd56434f8691799b1d9360
浏览器会将该 cookie 与每个请求一起发送到服务器。
如果 PHP 从 PHPSESSID cookie(在每个请求上)获取该唯一标识号,则 PHP 会在临时目录中进行搜索,并将该编号与文件名进行比较。如果两者相同,则它将检索现有会话,否则将为该用户创建新会话。
当用户关闭浏览器或离开站点时,会话将被销毁。服务器还会在预定的会话时间到期后终止会话。这些是 PHP 用于处理会话的简单机制步骤。我希望这篇文章能帮助你理解PHP SESSION是如何工作的。