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

PHP会话是如何工作的?(不是“如何使用它们?”),php,session,Php,Session,会话文件通常存储在服务器上的/tmp/中,并命名为sess{Session\u id}。我一直在看这些内容,不知道它们到底是如何工作的 从文件中获取变量名和内容很容易。但是PHP如何知道哪个会话属于谁呢 会话id看起来完全随机,一个IP地址可以有多个用户,如果每个用户打开多个浏览器窗口,则每个用户可以有多个会话 那么它是如何工作的呢?会话ID确实是随机的,并且根据配置在cookie或URL中传递。您可能已经在某些URL中看到了此PHPSESSID=xxxx,还有一个同名cookie。一般情况下:

会话文件通常存储在服务器上的
/tmp/
中,并命名为
sess{Session\u id}
。我一直在看这些内容,不知道它们到底是如何工作的

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

会话id看起来完全随机,一个IP地址可以有多个用户,如果每个用户打开多个浏览器窗口,则每个用户可以有多个会话


那么它是如何工作的呢?

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

一般情况下:

  • 会话id在用户创建会话时发送给用户
  • 它存储在cookie中(默认情况下称为
    PHPSESSID
  • 浏览器会将cookie随每个请求一起发送到服务器
  • 服务器(PHP)使用包含会话id的cookie来知道哪个文件对应于该用户
会话文件中的数据是
$\u SESSION
的内容,已序列化(即,表示为字符串--具有如下函数);并在PHP加载文件时取消序列化,以填充
$\u会话
数组


有时候,会话id不是存储在cookie中,而是通过URL发送的——但现在这种情况非常罕见


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


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

PHP中的会话是通过使用session\u start()函数启动的。与setcookie()函数一样,session_start()函数必须位于页面上任何HTML(包括空行)之前。它将如下所示:
....... 等
session_start()函数生成一个随机会话Id,并将其存储在用户计算机上的cookie中(这是唯一实际存储在客户端的会话信息)。cookie的默认名称为PHPSESSID,不过这可以在服务器上的PHP配置文件中更改(然而,大多数托管公司将不使用它。)要在PHP代码中引用会话Id,您需要引用变量$PHPSESSID(这是一个cookie名称;记住Cookies中的名称吗?

PHP会话是如何工作的

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

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

  • 将在服务器上创建一个新文件,该文件的名称为具有sess_uuu.前缀的唯一标识号(即
    sess_uuA86B10AEB5CD56434F8691799B1D9360

  • 浏览器会随每个请求将cookie发送到服务器

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


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

看一看H移动设备(来自本机应用程序)如何正常处理会话?存储会话ID?或者这是OAuth出现的吗?那么你是说PHP会话是服务器端管理的,不应该期望在浏览器的“会话存储”中看到会话变量本身的标识?但是如果我登录到某个站点,比如说(又名:在一个会话中),并打开一个新选项卡
mysite.com/cart
。我还会收到我的“你好,乔·多伊,5条消息,这是你的购物车列表…”aka会话信息。——但是为什么浏览器会在GET请求的同时发送任何会话ID?快速更新:我可以问会话ID如何提供安全性吗?例如,如果用户登录并到达其配置文件,而不是更改url参数以访问不同用户的配置文件,那么会话ID如何防止这种情况?