PHP 会话如何工作?(不是“如何使用它们?

2022-08-30 06:53:34

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

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

session_id似乎完全随机,一个IP地址可以有多个用户,如果每个用户打开了多个浏览器窗口,则每个用户可以有多个会话。

那么它是如何工作的呢?


答案 1

在一般情况下:

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

会话文件中的数据是 的内容,序列化(即,表示为字符串 - 具有诸如序列化之类的函数);并在 PHP 加载文件时取消序列化,以填充数组。$_SESSION$_SESSION


有时,会话ID不会存储在cookie中,而是以URL形式发送 - 但现在这种情况非常罕见。


有关详细信息,您可以查看手册的会话处理部分,其中提供了一些有用的信息。

例如,有一个关于传递会话ID的页面,它解释了如何使用cookie或在URL中从一个页面传递会话ID-以及哪些配置选项会影响这一点。


答案 2

PHP 会话如何工作

  • 首先,PHP为单个会话创建一个16字节长的唯一标识符号(存储为32个十六进制字符的字符串,例如)。a86b10aeb5cd56434f8691799b1d9360

  • PHPSESSID cookie 将该唯一标识号传递给用户的浏览器以保存该数字。

  • 在服务器上创建一个新文件,该文件具有唯一标识号的相同名称,并带有sess_前缀(即 .sess_a86b10aeb5cd56434f8691799b1d9360

  • 浏览器会将该 cookie 与每个请求一起发送到服务器。

  • 如果 PHP 从 PHPSESSID cookie(在每个请求上)获取该唯一标识号,则 PHP 会在临时目录中进行搜索,并将该编号与文件名进行比较。如果两者相同,则它将检索现有会话,否则将为该用户创建新会话。

当用户关闭浏览器或离开站点时,会话将被销毁。服务器还会在预定的会话时间到期后终止会话。这些是 PHP 用于处理会话的简单机制步骤。我希望这篇文章能帮助你理解PHP SESSION是如何工作的。


推荐