我正在创建3个会话并使用适当的功能进行销毁。然而,它给我带来了奇怪的问题,在Internet Explorer中它没有破坏会话,在firefox和chrome中,我必须刷新页面两次。这是我用来检查的简单代码:
的login.php (这是为了创建会话)
if(isset($_POST['create_session'])){
$_SESSION['user_id'] = '1';
$_SESSION['first_name'] = 'first name';
$_SESSION['last_name'] = 'last name';
echo "Session Created Successfully! Click <a href='index.php'>here</a>";
}
?>
<form method="post" action="">
<input type="submit" value="Create Session" name="create_session">
</form>
的index.php (这是为了检查会话是否已正确创建)
<?php
session_start();
echo "<pre>";print_r($_SESSION);
echo "<a href='logout.php'>logout</a>";
?>
logout.php (这就是我破坏会话的方式)
<?php
session_start();
session_destroy();
session_write_close();
header("location:login.php");
?>
我尝试过使用stackoverlow本身的功能就像打击一样:
然而,解决方案都没有奏效。
我正在使用来自流动网络的云端来托管代码,以防任何人遇到来自同一服务提供商的相同问题。他们的支持说他们在云中使用opcache引擎,以防opcache是原因,不确定。
让我主持一个项目是一个僵局,所以正确的解决方案将非常有用。
答案 0 :(得分:0)
<?php
session_start();
session_unset();
$_SESSION = array();
session_destroy();
header("Location: http://example.com");
?>
这应该足以解决您的问题。
答案 1 :(得分:0)
如果使用$ _SESSION,请使用unset()取消注册会话变量。
这是方式:
session_start();
$_SESSION['user_id'] = '';
$_SESSION['first_name'] = '';
$_SESSION['last_name'] = '';
unset($_SESSION['user_id']);
unset($_SESSION['first_name']);
unset($_SESSION['last_name']);
header("location: /login.php");
exit;
请阅读此处的警告和通知: http://php.net/manual/en/function.session-destroy.php
您不必从通常的代码调用session_destroy()。清理$ _SESSION数组而不是销毁会话数据。