一尘不染

我对PHP会话的理解正确吗?

php

我一直对会话在内部的工作方式感兴趣,但是我对C的知识很少(并且不确定在PHP源代码中的位置)。

这是我目前对会话的了解:

  1. 当您启动会话时,将为用户分配一个会话ID,该ID存储在cookie中。
  2. 会话数据保存(通过$_SESSION)后,将与相关的会话ID和到期时间一起存储在文件系统中。

它是否正确?另外,创建会话ID的方法是什么?我认为这是基于时间的,但是如果两个用户同时发送请求该怎么办?内部采用什么方法来防止获得相同的ID?

谢谢,


阅读 203

收藏
2020-05-29

共1个答案

一尘不染

我对内部会话处理过程的理解如下:

session_start被调用时,PHP正在寻找来自客户端的参数通过了POST,GET,或在一个cookie发送(取决于配置;请参阅
session.use_cookies

session.use_only_cookies

session.use_trans_sid指定
)用的名称
session.name的

值,以使用已启动的会话的会话ID。

如果找到有效的会话ID,它将尝试从存储中检索会话数据(请参阅
session.save_handler
)以将数据加载到中$_SESSION。如果找不到ID或禁止使用它,PHP将使用哈希函数(请参见
session.hash_function
)对生成随机数据的源数据(请参见
session.entropy_file
)生成一个新的ID 。

在运行时结束时或session_write_close调用时,会话中的数据$_SESSION将存储到指定的存储器中。

2020-05-29