如何在注销功能中将会话 ID 标记为已过时 [重复]

Posted

技术标签:

【中文标题】如何在注销功能中将会话 ID 标记为已过时 [重复]【英文标题】:how to mark session ID as obsolete in log out function [duplicate] 【发布时间】:2016-06-28 16:38:09 【问题描述】:

this website 建议,为了实现强大的注销功能,您必须将会话 ID 标记为过时。

我想知道你究竟会如何做到这一点?我已经包含了session_regenerate_id(true),但我不确定这是否会将会话 ID 标记为过时。

当提交索引页面上的注销表单时,它们会被发送回登录页面:

登录页面:

if(isset($_POST["log_out"]) && ($_POST["log_out"] == '1')) 
    //this means we have come from another page after pressing the log out button 
    //so therefore we remove session variables and destroy session

    //The logout function on your website should mark session IDs as obsolete.
    session_regenerate_id(true); //is this right????????

    session_unset(); 
    session_destroy(); 
    $loginMessage = "You have been logged out";

索引页面注销表单:

<form id="form-log-out" name="form-log-out" method="post" action="login.php" onsubmit="return confirmLogOut()">
    <input name="log_out" type="hidden" value="1"/>
    <input type="submit" class="button_style" value="Log Out" />
</form>

【问题讨论】:

【参考方案1】:

根据the docs,session_regenerate_id

使用新生成的更新[s]当前会话 id

...

session_regenerate_id() 会将当前会话 id 替换为新的,并保留当前会话信息。

因此,是的,这会使旧的会话 ID 过时。

如需了解更多信息,请参阅this question。

【讨论】:

谢谢。您能告诉我(在这种情况下)如何将会话 ID 标记为过时增加安全性吗?如果会话无论如何都会被立即销毁,我很困惑为什么需要它。当您销毁会话时,它是否也不会销毁会话 ID? @Sarah session_destroy 实际上不会重置会话 ID,这就是为什么 session_regenerate_id 仍然有用。看到这个答案:***.com/a/8642254/2773837 嗯,现在说得通了..谢谢.. 还有一个问题。您是否看到我将“true”作为 session_regenerate_id 的参数的方式?这是否也会删除以前的会话数据? @Sarah 是的。文档说:“delete_old_session 是否删除旧的关联会话文件。”

以上是关于如何在注销功能中将会话 ID 标记为已过时 [重复]的主要内容,如果未能解决你的问题,请参考以下文章

如何在 mongoDB 中将文档标记为已标记/已删除

如何在 RAML 中将 REST 服务标记为已弃用

如何在 Delphi 中将单个枚举值标记为已弃用

玩 framework 2.0 演进,如何在 PROD 中将不一致的状态标记为已解决

在 Corda 中将状态标记为已使用而不更改其内容

如何保留主题 ID,在 TableViewCell 中标记为已完成