如何在同一个php脚本中销毁两个不同的会话?

时间:2015-12-15 16:24:10

标签: php

在我的会话启动脚本中,我选择session_name,然后执行session_start。

   $session_name = rand(0,1) ? 'first' : 'second';
   session_name($session_name);
   session_start();

以上代码在每个页面加载时运行。加载几页后,可能会有session_name和#39;第一个'和session_name' second'。

这是我的注销脚本中的代码,用于尝试销毁这两个这些会话:

session_start();
session_name("first");
session_unset();
session_destroy();
session_write_close();

session_start();
session_name("second");
session_unset();
session_destroy();
session_write_close();

上面的脚本先破坏而不是秒。如果我再次运行注销脚本,则会破坏第二个会话,因为第一个会话已被删除。

如何在同一个脚本中销毁两个会话名称的会话?

2 个答案:

答案 0 :(得分:3)

尝试

<?php
    session_name("first");
    session_start();
    echo session_status();
    session_destroy();
    echo session_status();

    session_name("second");
    session_start();
    echo session_status();
    session_destroy();
    echo session_status();
?>

我在xampp上测试了它,它返回值2121,表示会话处于活动状态,不存在,会话处于活动状态,不存在。

我在session_start()之前放置了session_name(),因为在你的会话已经启动后设置名称并不会生效。我用Google搜索了它,它必须对php.ini文件做一些事情,其中​​session.auto_start设置为“true”。

这里有关于这个主题的解释和辩论:http://php.net/manual/en/function.session-name.php - 检查评论。

<强>编辑:

再次审核您的编辑后,您基本上不创建两个会话但只创建一个会话,并以随机名称“first”或“second”开头。您可以销毁会话,但cookie将保留。我已经在xampp上测试了你的代码,它就是这样做的。首先,PHP启动一个会话并存储时间值为“session”的cookie,在重新加载页面后,它将再次加载两个选项中的一个,但这次它会将现有的cookie时间更改为“N / A”。您应该在页面加载后搜索解决方案以清除域中的Cookie:

<?php
    $session_name = rand(0,1) ? 'first' : 'second';
    session_name($session_name);
    session_start();

    deleteCookies($session_name);

    function deleteCookies($skip_this_one) {
        if (isset($_SERVER['HTTP_COOKIE'])) {
        $cookies = explode(';', $_SERVER['HTTP_COOKIE']);
        foreach($cookies as $cookie) {
            $parts = explode('=', $cookie);
            $name = trim($parts[0]);
            if ($name == $skip_this_one) {
                //skip
            }else{
                setcookie($name, '', time()-1000);
                setcookie($name, '', time()-1000, '/');
            }
        }
    }
    //do something inside your session
    //when done, stop the session the way you want
    session_destroy();
}
?>

这将删除所有以前的Cookie并保持当前会话处于打开状态。

此解决方案从此处重写:how to delete all cookies of my website in php

希望这会有所帮助:)

答案 1 :(得分:-1)

请尝试以下代码

<?php unset($_SESSION['name']); // will delete just the name data
session_destroy(); // will delete ALL data associated with that user. 
?>