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/