当前位置: 首页 > 面试题库 >

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

林鹏鹍
2023-03-14
问题内容

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

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

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

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

谢谢,


问题答案:

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

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将存储到指定的存储器中。



 类似资料:
  • 我仍在学习合适的JavaEE模式,希望您能给我一些关于解决这个问题的最佳工具的建议。 我有一个需要管理多个智能代理实例的系统。客户端可以创建新实例,也可以按名称访问所需实例。多个客户端可以同时访问同一个代理。 我们的计划是通过REST接口向代理公开操作,因此调用可能类似于: 这些会话在重启后不会持续,所以我不寻求资源管理。 我的想法是,我们可以使用一个会话bean来管理名称到代理的映射,然后将其注

  • 问题内容: 我知道这个话题已经讨论 了很多 ,但是我还有一些具体问题仍未得到解答。例如: 所以,我的问题是 做的提供足够的安全性? 可以保存用户的IP和导航器,然后在每次加载页面时进行检查以检测会话劫持吗?这有什么问题吗? 使用正确吗? 使用正确吗? 问题答案: 您的配置很棒。您肯定阅读了如何锁定php会话。但是,此行代码会抵消您的php配置提供的许多保护: 这是一种生成会话ID 的 特别糟糕的

  • 问题内容: 我正在尝试正确注销管理员用户。这是我的功能: 基本上,一旦我对密码进行了身份验证,就将会话设置为有效(总共只有1个用户)。现在,当管理员点击注销时,我想销毁当前会话,并销毁cookie,以便他们不能只是使用浏览器中存储的会话cookie返回管理页面。但是我的代码不起作用。我点击注销,然后我可以直接导航回到管理页面。但是,如果我删除Cookie,则该功能非常完善。那么这里的cookie删

  • 问题内容: 我已经阅读了许多有关注销脚本的php教程,我想知道从会话注销的正确方法是什么! 脚本1 剧本2 脚本3 有没有更有效的方法可以做到这一点?始终可以通过重新登录来创建会话,因此我应该为使用session_destroy()而使用unset($ _ SESSION [‘variable’])代替吗?以上3个脚本中的哪一个更可取? 问题答案: 在PHP手册的session_destroy()

  • 假设我在Heroku Rails上有以下设置,一个web dyno和两个worker dyno。 下面是我相信是真的,我希望有人能证实这些说法或指出一个不正确的假设。 我对这一点很有信心,但我对客户端和服务器的使用感到有点困惑,“连接池”指的是DB和Redis连接,“工作者”指的是puma和heroku dyno工作者。 我想是水晶清楚我希望这也可以作为一个综合指南为任何其他初学者有困难与此 谢谢

  • 所以我正在为PHP建立一个网站 因此,基本上,页面加载并检查用户是否已登录,如果已登录,则加载成员区域。如果没有,它会检查用户是否正在尝试登录,如果没有,它会显示登录表单。我的问题是,每次我或其他人尝试登录时,页面都会重新加载,但不会将他们带到“成员”区域,而是将他们带回到登录表单。。。另外,在文档的顶部有一行: