php session破坏特定服务器中的问题

时间:2018-01-19 07:27:07

标签: php session cloud session-variables session-cookies

我正在创建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本身的功能就像打击一样:

  1. session_cache_limiter(&#34;非缓存&#34);
  2. session_cache_expire(0);
  3. session_write_close();
  4. 使用ob_flush();
  5. 然而,解决方案都没有奏效。

    我正在使用来自流动网络的云端来托管代码,以防任何人遇到来自同一服务提供商的相同问题。他们的支持说他们在云中使用opcache引擎,以防opcache是​​原因,不确定。

    让我主持一个项目是一个僵局,所以正确的解决方案将非常有用。

2 个答案:

答案 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数组而不是销毁会话数据。