PHP - 为什么我不能摆脱这个会话id cookie?

Nat*_*ong 16 php cookies session session-cookies

我正在尝试解决Web应用程序的注销功能.当您登录时,该应用程序会为其域设置多个Cookie.这是当前的注销程序:

  • 单击一个链接,该链接将您转到注销页面
  • 注销页面运行一个函数,该函数调用session_destroy()并循环遍历域的所有cookie,并将它们设置为过去(请参阅下面的代码)
  • 然后,注销页面重定向到登录页面,这是直接的HTML.

在此过程结束时,所有其他cookie都未设置,但PHPSESSIDcookie仍然存在,具有相同的值,并且仍设置为在会话结束时到期.

我在这里错过了什么?

这是我上面提到的注销功能:

function log_out_current_user() {

        // Destroy the session
        if (isset($_SESSION)) {
            session_destroy();
        }

        // Expire all of the user's cookies for this domain:
        // give them a blank value and set them to expire
        // in the past
        if (isset($_SERVER['HTTP_COOKIE'])) {
            $cookies = explode(';', $_SERVER['HTTP_COOKIE']);
            foreach($cookies as $cookie) {
                $parts = explode('=', $cookie);
                $name = trim($parts[0]);
                setcookie($name, '', time()-1000);
                setcookie($name, '', time()-1000, '/');
            }
            // Explicitly unset this cookie - shouldn't be redundant,
            // but it doesn't hurt to try
            setcookie('PHPSESSID', '', time()-1000);
        }

    }
Run Code Online (Sandbox Code Playgroud)

Nik*_*kiC 32

您没有使用与创建时相同的参数删除它.使用session_get_cookie_params获得的.为了便于携带,您应该获取cookie的名称session_name.这是一个小脚本:

$params = session_get_cookie_params();
setcookie(session_name(), '', 0, $params['path'], $params['domain'], $params['secure'], isset($params['httponly']));
Run Code Online (Sandbox Code Playgroud)