【问题标题】:Destroying PHP Session销毁 PHP 会话
【发布时间】:2012-05-25 18:54:49
【问题描述】:

stackoverflow 上有很多关于 destorying session 的页面。相信我,我一直在阅读它们并且发现了这个:Why does my session remain?

我的问题很简单,我真的需要执行以下所有操作才能正确销毁会话吗?

$tmp = session_id();
session_destroy();
session_id($tmp);
unset($tmp);

这是唯一提出这种极端措施的页面。大多数页面只建议session_destroy();。

只是为了澄清,因为似乎有些混乱,我正在寻找最有效的方法。

提前致谢。

【问题讨论】:

  • 除了在完成会话后销毁会话,您还必须在有人成功登录时生成一个新的随机会话 ID 以防止会话固定。
  • 很棒的评论@Kerrek,但我该怎么做呢?
  • 否,但基于该问题和我的问题 (stackoverflow.com/questions/4921231/why-does-my-session-remain)。 @subirkumarsao 我将这个问题作为一个单独的问题提出,因为我想要一个明确的答案。我正在寻找效率这个人正在寻找如何做某事的指示。对不起,如果我不清楚,但其他人似乎已经理解了。
  • 如果你想彻底销毁你的会话,恐怕你需要做所有这些事情。
  • 如果您对某人的回答有疑问,请在此处提出。为什么要创建一个新问题。

标签: php security session destroy


【解决方案1】:

新的答案已经停止出现,所以我根据所有答案输入我学到的东西。这是各种答案的汇总。希望它会帮助其他人。下面列出了销毁会话 100% 有效的最有效方法:

if (ini_get("session.use_cookies")) 
{
    $params = session_get_cookie_params();
    setcookie(session_name(), '', time() - 42000,
        $params["path"], $params["domain"],
        $params["secure"], $params["httponly"]
        );
}

$_SESSION = array();
$tmp = session_id();
session_id($tmp);
unset($tmp);
session_unset();
session_destroy();
session_write_close();
session_regenerate_id(True); // true indicates the need to delete the old session

感谢大家的帮助,向我展示了如何做到这一点。这不是一个人的努力。我要特别感谢@Kerrek SB,@Uday @Dhruvisha。如果您有更多建议,请随时添加 cmets,我将编辑我的答案。

【讨论】:

    【解决方案2】:

    session_destroy() 销毁与当前会话关联的所有数据。它不会取消设置与会话关联的任何全局变量,也不会取消设置会话 cookie。要再次使用会话变量,必须调用 session_start()。

    为了完全终止会话,例如注销用户,还必须取消设置会话 ID。如果使用 cookie 传播会话 id(默认行为),则必须删除会话 cookie。 setcookie() 可以用于此。

    示例使用 $_SESSION 销毁会话

    // Unset all of the session variables.
    $_SESSION = array();
    
    // If it's desired to kill the session, also delete the session cookie.
    // Note: This will destroy the session, and not just the session data!
    if (ini_get("session.use_cookies")) {
        $params = session_get_cookie_params();
        setcookie(session_name(), '', time() - 42000,
            $params["path"], $params["domain"],
            $params["secure"], $params["httponly"]
        );
    }
    
    // Finally, destroy the session.
    session_destroy();
    ?>
    

    更多详情请查看here。

    【讨论】:

      【解决方案3】:
      <?php
      session_start();
      $s_id = session_id();
      echo $s_id;
      
      
      session_destroy();
      session_unset();
      
      
      session_start();
      session_regenerate_id(true);
      $s_id = session_id();
      
      ?>
      

      试试这个。它会起作用的。

      【讨论】:

        猜你喜欢
        • 2011-11-06
        • 1970-01-01
        • 1970-01-01
        • 2011-02-01
        • 1970-01-01
        • 2015-03-20
        • 1970-01-01
        • 2013-10-18
        • 2011-12-12
        相关资源
        最近更新 更多