我尝试使用session_destroy()
方法销毁所有会话变量,但在使用此方法后,值不会被销毁。
为什么session_destroy()
无效?
还有其他方法可以在PHP中销毁会话吗?
if (isset($_SESSION['LAST_ACTIVITY']) && (time() - $_SESSION['LAST_ACTIVITY'] > 1800))
{
session_destroy();
session_unset();
}
答案 0 :(得分:89)
回复可能为时已晚,但请确保您的会话在销毁之前已初始化。
session_start() ;
session_destroy() ;
即。如果在index.php中初始化会话,则无法在logout.php中销毁会话。您必须在销毁之前在logout.php中启动会话。
答案 1 :(得分:45)
使用session_destroy()
后,会话在幕后被销毁。出于某种原因,这不会影响$_SESSION
中已为此请求填充的值,但在将来的请求中它将为空。
如果您愿意($_SESSION
),可以手动清除$_SESSION = [];
。
答案 2 :(得分:15)
如果需要清除$_SESSION
的值,请将数组设置为空数组:
$_SESSION = array();
当然,在您致电$_SESSION
后,您无法在其他网页上访问session_destroy
的值,因此无关紧要。
尝试以下方法:
session_destroy();
$_SESSION = array(); // Clears the $_SESSION variable
答案 3 :(得分:4)
实际上,它有效,但你还需要在session_destroy之后执行$_SESSION = array();
以摆脱$ _SESSION变量。但是,请避免执行unset($_SESSION)
,因为这会使会话无效。
答案 4 :(得分:3)
我还必须这样删除会话Cookie:
session_start();
$_SESSION = [];
// If it's desired to kill the session, also
// delete the session cookie.
// Note: This will destroy the session, and
// not just the session data!
if (ini_get("session.use_cookies")) {
$params = session_get_cookie_params();
setcookie(session_name(), '', time() - 42000,
$params["path"], $params["domain"],
$params["secure"], $params["httponly"]
);
}
// Finally, destroy the session.
session_destroy();
答案 5 :(得分:1)
嗯,这对我来说似乎是一个新问题,使用新的php服务器。过去从未遇到会议未结束的问题。
在会话测试中,我设置会话,运行会话计数++并关闭会话。重新加载页面,令我惊讶的是变量仍然存在。
我尝试了mc10发布的以下建议
session_destroy();
$_SESSION = array(); // Clears the $_SESSION variable
然而,这不起作用。我认为它不会起作用,因为会话在销毁之后没有激活,所以我改掉了它。
$_SESSION = array();
session_destroy();
有效,重新加载页面,开始sessios并查看设置变量都显示为空/未设置。
真的不确定为什么session_destroy()在这个PHP版本5.3.14服务器上不起作用。
只要我知道如何清除会话,就不要在乎。
答案 6 :(得分:1)
session_destroy()
生效。所以在第二次上传时,会话终止。但是使用unset()
,您也可以从页面中注销。
答案 7 :(得分:0)
如果您在127.0.0.1
销毁会话,则不会影响localhost
,反之亦然
答案 8 :(得分:-1)
有效,但有时 不 (请查看以下示例)
<?php
session_start();
$_SESSION['name']="shankar";
if(isset($_SESSION['name']))
{
echo $_SESSION['name']; // Outputs shankar
}
session_destroy();
echo $_SESSION['name']; // Still outputs shankar
<强>奇怪!!对吗?
在上述方案中,如果您将 session_destroy();
替换为 unset($_SESSION['name']);
,则可以按预期工作。
但我想破坏所有变量而不仅仅是一个变量!
是的,也有一个解决方案。只需取消设置 $_SESSION
数组即可。 [ Credits Ivo Pereira ]
unset($_SESSION);
答案 9 :(得分:-2)
添加session_start();之前!Doctype宣言
<?php session_start(); ?>
<!doctype html>
<html>
<body>
<?php
if (isset($_SESSION['LAST_ACTIVITY']) && (time() - $_SESSION['LAST_ACTIVITY'] > 1800))
{
session_destroy();
session_unset();
}
?>
</body>
</html>