PHP会话如何工作? (不是“他们怎么用?”)

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

从文件中获取variables名称和内容很容易。 但是PHP怎么知道会话属于谁?

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

那么它是怎样工作的?

在一般情况下:

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

会话文件中的数据是$_SESSION的内容,序列化(即,表示为一个string – 带有一个函数,如序列化 ) ; 并在PHP加载文件时解除序列化,以填充$_SESSION数组。

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

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

例如,有一个关于传递会话ID的页面,该页面解释了会话ID是如何在页面之间传递的,使用Cookie还是在URL中 – 以及哪些configuration选项会影响此信息。

PHP会话如何工作?

  • 首先,PHP为每个会话创build一个16字节长的唯一标识号(存储为32个hex字符的string,例如a86b10aeb5cd56434f8691799b1d9360 )。

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

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

  • 浏览器将每个请求都发送给服务器。

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

会话在用户closures浏览器或离开网站时被破坏。 服务器也在会话时间的预定时间段过期之后终止会话。 这些是PHP用来处理会话的简单机制步骤。 我希望这篇文章能够帮助你理解PHP SESSION是如何工作的。

看到这篇文章的更多细节。 PHP会话如何工作?

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

PHP中的会话是通过使用session_start()函数启动的。 像setcookie()函数一样,session_start()函数必须位于页面上的任何HTML(包括空白行)之前。 它会看起来像这样: <?php session_start( );?><html><head> …….等session_start()函数生成一个随机的会话ID并将其存储在用户的计算机上的Cookie这是实际存储在客户端的唯一会话信息。)Cookie的默认名称是PHPSESSID,尽pipe这可以在服务器上的PHPconfiguration文件中更改(但是,大多数托pipe公司将使其保持独立)。为了在你的PHP代码中引用会话ID,你需要引用variables$ PHPSESSID(这是一个cookie名称;记得从Cookies中)