在我的会话启动脚本中,我选择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();
上面的脚本先破坏而不是秒。如果我再次运行注销脚本,则会破坏第二个会话,因为第一个会话已被删除。
如何在同一个脚本中销毁两个会话名称的会话?
答案 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.
?>