在会话启动脚本中,我选择session_name,然后执行session_start。
$session_name = rand(0,1) ? 'first' : 'second';
session_name($session_name);
session_start();
上面的代码在每次页面加载时都会运行。在几次页面加载之后,session_name"first"和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();
上面的脚本破坏了第一个,但没有破坏第二个。如果我第二次运行注销脚本,它就会破坏第二个会话,因为第一个会话已经被删除。
如何销毁同一脚本中两个会话名称的会话?
TRY IT
<?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_name()放在session_start()之前,因为在会话已经启动后,按您的方式设置名称不会生效。我已经在谷歌上搜索过了,它必须对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,并保持当前会话的打开状态。
这个解决方案是从这里重写的:如何在php中删除我网站的所有cookie
希望这有帮助:)
请尝试以下代码
<?php unset($_SESSION['name']); // will delete just the name data
session_destroy(); // will delete ALL data associated with that user.
?>