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

时间:2009-10-08 04:52:14

标签: php session

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

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

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

那它是如何运作的?

4 个答案:

答案 0 :(得分:185)

一般情况:

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

会话文件中的数据是$_SESSION的内容,序列化(即表示为字符串 - 具有serialize等功能);并且在PHP加载文件时未序列化,以填充$_SESSION数组。


有时候,会话ID不会存储在Cookie中,而是会在网址中发送 - 但现在这种情况非常罕见。


有关更多信息,您可以查看手册的Session Handling部分,其中提供了一些有用的信息。

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

答案 1 :(得分:8)

PHP会话如何工作

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

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

  • 在服务器上创建一个新文件,其唯一标识号的名称与sess_前缀相同(即sess_a86b10aeb5cd56434f8691799b1d9360。)

  • 浏览器会根据每个请求将该cookie发送到服务器。

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

当用户关闭浏览器或离开网站时会破坏会话。在预定的会话时间段到期之后,服务器也终止会话。这些是PHP用于处理会话的简单机制步骤。我希望本文能帮助您了解PHP SESSION的工作原理。

有关详细信息,请参阅此文章。 How Does PHP Session Works

答案 2 :(得分:4)

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

答案 3 :(得分:1)

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