【问题标题】:how to logout from a php session - session_destroy doesn't seem to be enough如何从 php 会话中注销 - session_destroy 似乎还不够
【发布时间】:2014-01-23 06:16:21
【问题描述】:

我正在尝试学习 PHP 并使用会话。我看到了有关在注销时使用 session_destroy 的示例,但我在 php 文档中看到了这一点:

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

那么注销后需要做什么?

【问题讨论】:

    标签: session cookies php


    【解决方案1】:

    在您刚刚引用的段落下方,有一个示例回答了您的问题: http://php.net/manual/en/function.session-destroy.php

    示例 #1 使用 $_SESSION 销毁会话

    <?php
    // Initialize the session.
    // If you are using session_name("something"), don't forget it now!
    session_start();
    
    // 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();
    ?>
    

    【讨论】:

    • 嘎。有,我今天看了这么多东西,我只是没看到。谢谢。
    【解决方案2】:

    在我看来,这只是必要的

    session_start();
    unset($_SESSION["nome"]);  // where $_SESSION["nome"] is your own variable. if you do not have one use only this as follow **session_unset();**
    

    【讨论】:

    • 我今天在其他地方看到过这个名字。它应该是什么?
    • 您只需将 nome 替换为您设置的会话变量。
    【解决方案3】:

    我从未真正从会话中删除会话 ID。我通常只是从会话中取消设置必要的变量(例如,如果您将登录用户设置为$_SESSION['user'] = $userModel;,那么我只需unset($_SESSION['user']);)。要从用户的浏览器中删除 cookie(如文档所述),请执行以下操作:

    setcookie(session_id(), "", time() - 3600);
    

    阅读session_destroy() 文档中的Example #1 了解更多信息。

    【讨论】:

      【解决方案4】:

      首先:使用 unset() 函数。所以如果你有一个 $_SESSION['user_id'],并且你想销毁它: unset($_SESSION['user_id'])

      您也可以将 unset() 用于 cookie 或其他变量

      第二个:我们能有一些代码吗?

      【讨论】:

        【解决方案5】:

        如果您使用的是会话 ID。那么你可以这样做

        session_start();
        unset($_SESSION['id']);
        session_destroy();
        

        对于 cookie,您可以将 cookie 时间设置为某个过去的日期。

        【讨论】:

          【解决方案6】:

          只对不使用的旧代码使用 session_unset() $_SESSION。

          session_start();

          session_unset($_SESSION['email-user']); session_destroy();`

          【讨论】:

            猜你喜欢
            • 2023-03-19
            • 1970-01-01
            • 1970-01-01
            • 2017-01-26
            • 2014-08-15
            • 2010-10-04
            • 1970-01-01
            • 2013-06-26
            • 1970-01-01
            相关资源
            最近更新 更多