gpt4 book ai didi

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

转载 作者:可可西里 更新时间:2023-11-01 13:27:43 26 4
gpt4 key购买 nike

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

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

以上代码在每次页面加载时运行。加载几页后,session_name 'first' 和 session_name 'second' 可能都会有 session 。

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

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

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

上面的脚本先销毁但不销毁第二个。如果我第二次运行注销脚本,它会破坏第二个 session ,因为第一个 session 已被删除。

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

最佳答案

试一试

<?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 处于事件状态,不存在, session 处于事件状态,不存在。

我将 session_name() 放在 session_start() 之前,因为像您那样设置名称在 session 已经启动后不会生效。我用谷歌搜索它,它必须对 php.ini 文件做一些事情,其中​​ session.auto_start 设置为“true”。

有关此主题的解释和辩论可在此处找到:http://php.net/manual/en/function.session-name.php - 检查评论。

已编辑:

再次检查您的编辑后,您基本上不会创建两个 session ,而只会创建一个 session ,它以随机名称“first”或“second”开头。您可以销毁 session ,但 cookie 将保留。我已经在 xampp 上测试了您的代码,它确实做到了这一点。首先,PHP 启动一个 session 并存储一个时间值为“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 并保持当前 session 打开。

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

希望这有帮助:)

关于php - 如何在同一个 php 脚本中销毁两个不同的 session ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34294333/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com