PHP session_destroy()没有工作

时间:2016-06-18 23:01:51

标签: php session

这令人沮丧,我已经使用PHP Sessions很长一段时间了,直到现在还没有遇到这个问题。我正在使用PHP处理基本的登录/注销脚本。

这是我的退出脚本所拥有的内容。

logout.php

<?php
     session_start();
     unset($_SESSION['email']);
     session_destroy();
     header("Location:login.php"); 
?>

因此我的 login.php 脚本具有以下代码:

的login.php

// I send the user to logged_in.php if the session already exists.
if(isset($_SESSION['email'])) header("Location:logged_in.php");

if(pass and username are correct){
    $_SESSION['email'] = $email;
    session_write_close();
    header('Refresh: 1; logged_in.php');
}

现在,当我登录并且我被重定向到 logged_in.php 页面时,请在我转到 logout.php 页面时,而不是重定向到 login.php 它会返回 logged_in.php

这意味着当它到达 login.php 时,会话仍然存在,并在 login.php

中输入以下if语句
if(isset($_SESSION['email'])) header("Location:logged_in.php);

2 个答案:

答案 0 :(得分:1)

尝试类似的东西:

session_start();

// I send the user to logged_in.php if the session already exists.
if(isset($_SESSION['email'])) header("Location:logged_in.php");

if(pass and username are correct){
    $_SESSION['email'] = $email;
    session_write_close();
    header('Refresh: 1; logged_in.php');
}

答案 1 :(得分:0)

session_regenerate_id(true)为我工作。我之前遇到过同样的问题。某些浏览器似乎在活动时没有正确删除会话cookie。重新生成ID会为您提供一个全新的会话,但您仍然应该删除旧的会话。我不太确定这是修复还是解决方法,但它确实有效。如果将参数设置为true,session_regenerate_id将创建一个新的会话变量并删除旧的变量。