php - session_regenerate_id() 与 session_id(randomString)

标签 php session

session_id($randomString)session_regenerate_id() 之间有什么明显区别?两者似乎都改变了 session ID:

session_regenerate_id() will replace the current session id with a new one, and keep the current session information.

session_id() is used to get or set the session id for the current session.

如果我做对了,session_regenerate_id() 会创建一个新的 session 文件并复制数据,并带有删除旧文件的选项;而 session_id($randomString) 只是更改现有文件中的 session ID。

如果是这样,复制文件有什么好处?从防止 session 固定的角度来看如何更好?

This answer和我发现的任何其他内容都没有回答我的问题。

最佳答案

好的,所以我做了一些测试来找出三个不同选项的区别(session_id($id) after session_start(), session_regenerate_id() session_regenerate_id(true))。这是实际发生的结果:


session_start 之后的 session_id($id)

在session_start之后调用session id函数会改变session id。在页面加载结束时,当前 session 内容将写入一个新的 session 文件。这也将保留旧的 session 文件,并且不会因任何更改而更新。但是,session_id 不会发送新的 session cookie。这是由 session_start 完成的,即使在 session_start 之前调用 session_id 也是如此。在下一个页面加载时,旧 session ID 被传递并加载与上次页面加载开始时相同的数据(新 session 更改将保存到新 ID)。


session_regenerate_id() 和 session_regenerate_id(true)

session_regenerate_id() 将创建和更改 session ID,将 session 转移到新文件并发送 cookie。将 true 作为参数传递也将删除旧 session 文件,省略参数将保留它。


就 session 固定而言,session_id($id)session_regenerate_id() 实际上会更糟,因为您在创建新 session 的同时留下旧 session 文件被劫持。可能有助于固定的唯一选择是调用 session_regenerate_id(true) 传递参数。

关于php - session_regenerate_id() 与 session_id(randomString),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37367982/

相关文章:

c# - 使用 Asp.Net MVC 处理临时 session 数据

Java - 安全 session 管理的最佳实践

node.js - 配对 sails、passport 和 mongo : error: A hook (`session` ) failed to load! 对象 .... 没有方法 'assign'

php - 包含的 php 文件上的 Session_start 与主页上的 session_start 冲突

php - symfony2 测试/获取 session 属性的最佳方式

php - 使用 Propel Versionable 在模型中调用 save()

php - 你能选择并加入一个mysql查询吗?

php - 如何在wordpress中让第一篇文章变大

javascript - 如何从html标签中获取前缀名称

php - 照片上传和显示 PHP, MySQL