gpt4 book ai didi

php - session_regenerate_id() 与 session_id(randomString)

转载 作者:可可西里 更新时间:2023-10-31 22:52:13 26 4
gpt4 key购买 nike

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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com