会话文件通常存储在服务器上的 /tmp/中,并命名为 sess_{session_id}。我一直在看里面的内容,不知道它们到底是如何工作的。
/tmp/
sess_{session_id}
从文件中获取变量名和内容很容易。但是 PHP 如何知道哪个会话属于谁呢?
Session _ id 看起来是完全随机的,一个 IP 地址可以有多个用户,如果每个用户打开多个浏览器窗口,那么他们可以有多个会话。
那么它是如何工作的呢?
会话 ID 的确是随机的,并且根据配置在 cookie 或 URL 中传递。您可能已经在某些 URL 中看到过这个 PHPSESSID = xxxx,还有一个 cookie 也叫这个名字。
在一般情况下:
PHPSESSID
会话文件中的数据是序列化 (即,表示为字符串-具有诸如 < a href = “ http://php.net/Series alize”rel = “ norefrer”> Series alize 之类的函数)的 $_SESSION的内容; 当文件由 PHP 加载时,它将被取消序列化,以填充 $_SESSION数组。
$_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 session_start( );?><html><head>
PHP 会话是如何工作的
首先,PHP 为单个会话创建一个16字节的长唯一标识符(以32个十六进制字符的字符串形式存储,例如 a86b10aeb5cd56434f8691799b1d9360)。
a86b10aeb5cd56434f8691799b1d9360
PHPSESSID cookie 将该唯一标识号传递给用户的浏览器以保存该号码。
在服务器上创建一个新文件,该文件的名称与 sess _ prefix (即 sess_a86b10aeb5cd56434f8691799b1d9360)的惟一标识号相同
sess_a86b10aeb5cd56434f8691799b1d9360
浏览器在每次请求时都会将 cookie 发送到服务器。
如果 PHP 从 PHPSESSID cookie (每次请求)获得唯一的标识号,那么 PHP 将在临时目录中搜索该编号并将其与文件名进行比较。如果两者相同,那么它将检索现有会话,否则它将为该用户创建一个新会话。
当用户关闭浏览器或离开站点时,会话将被销毁。服务器还会在预定的会话时间过期后终止会话。这些是 PHP 用来处理会话的简单机制步骤。我希望本文能够帮助您理解 PHPSESSION 是如何工作的。