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

会话文件通常存储在服务器上的 /tmp/中,并命名为 sess_{session_id}。我一直在看里面的内容,不知道它们到底是如何工作的。

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

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

那么它是如何工作的呢?

66931 次浏览

会话 ID 的确是随机的,并且根据配置在 cookie 或 URL 中传递。您可能已经在某些 URL 中看到过这个 PHPSESSID = xxxx,还有一个 cookie 也叫这个名字。

在一般情况下:

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

会话文件中的数据是序列化 (即,表示为字符串-具有诸如 < a href = “ http://php.net/Series alize”rel = “ norefrer”> Series alize 之类的函数)$_SESSION的内容; 当文件由 PHP 加载时,它将被取消序列化,以填充 $_SESSION数组。


有时,会话 ID 不存储在 cookie 中,而是以 URL 的形式发送——但是现在这种情况很少见。


有关更多信息,请参阅手册中的 会话处理部分,该部分提供了一些有用的信息。

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

PHP 中的会话通过使用 session _ start ()函数启动。与 setcookie ()函数一样,session _ start ()函数必须位于页面上的任何 HTML (包括空行)之前。它会像这样: <?php session_start( );?><html><head> 等等 Session _ start ()函数生成一个随机的 Session Id,并将其存储在用户计算机上的 cookie 中(这是唯一实际存储在客户端的会话信息)Cookie 的默认名称是 PHPSESSID,尽管这可以在服务器上的 PHP 配置文件中更改(但是大多数托管公司都不会使用它)因此,要在 PHP 代码中引用会话 Id,需要引用变量 $PHPSESSID (它是一个 cookie 名称; 还记得 Cookies 中的名称吗?)

PHP 会话是如何工作的

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

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

  • 在服务器上创建一个新文件,该文件的名称与 sess _ prefix (即 sess_a86b10aeb5cd56434f8691799b1d9360)的惟一标识号相同

  • 浏览器在每次请求时都会将 cookie 发送到服务器。

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

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