一尘不染

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

php

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

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

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

那么它是怎样工作的?


阅读 313

收藏
2020-05-26

共1个答案

一尘不染

在一般情况下:

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

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

有时,会话ID不会存储在Cookie中,而是也会通过URL发送-但这在当今非常罕见。

2020-05-26