PHP / Session / Caching - 处理logout.php后无法从index.php页面删除登录用户?

时间:2016-01-31 00:55:33

标签: php session

我有一个三个PHP脚本(logout.php,index.php,session.php),我在一个更大的应用程序中使用它。我合并了session.php(用作控制保留页面视图的机制,用于按下浏览器上的按钮)。

我正在尝试将logout.php清除缓存和登录的用户信息放在网页上,但无论我做什么,我似乎都无法注销。也就是说,用户仍然在登录时保留在我的页面上。

如何注销以确保用户未在我的index.php页面上显示为登录?

session.php文件

<? 
  session_cache_limiter('public');
  session_start();
?>

logout.php

<?php
    session_start();
    $_SESSION['expire'] = "<META HTTP-EQUIV=\"EXPIRES\" CONTENT=\"Mon, 02 May 2015 21:00:00 GMT\">";
    header('Location: index.php');                                             
?>

index.php脚本的开头

<?php   
    session_start(); 
    if (isset($_SESSION['expire']))
    {              
        echo $_SESSION['expire'];
        session_unset();
        session_destroy();
        unset($_SESSION);
    } 
?>

每次尝试注销时,错误日志都会显示以下内容。

PHP注意:会话已经启动 - 忽略第6行的index.php中的session_start()&lt; - 这是指我的本地代码中的if块中有session_start()的位置。

编辑 - 修改了index.php

<?php
    if (isset($_SESSION['expire']))
    {      
        session_start();        
        echo $_SESSION['expire'];
        session_destroy();
    } 
    else
    {
        require_once('session.php');
    }
?>

最新的index.php脚本

<?php
    if (session_status() === PHP_SESSION_NONE)
    {
        require_once('session.php');
    }
    else
    {
        session_start();  
        if (isset($_SESSION['expire']))
        { 
            $expire = $_SESSION['expire'];
            session_destroy();
            echo $expire;
        }
    }
?>

1 个答案:

答案 0 :(得分:0)

我为我的脚本制定了以下代码,解决了我遇到的注销问题。我将我的问题的原因缩小到我的浏览器中可能错误解释/解析的html代码,我在页​​面源代码中注意到它是红色标记。

<html>标记之前的php脚本中添加doctype和元标记之后,我的页面成功注销了!

<强>的index.php

 <!DOCTYPE html>
    <?php
        session_start();
        if (session_status() === PHP_SESSION_NONE)
        {
            require_once('session.php');
        }
        else if (isset($_SESSION['expire']))
        { 
            $expire = $_SESSION['expire'];
            session_destroy();
            echo $expire;
            echo "<meta http-equiv='refresh' content='0; url=index.php'>";
        } 
    ?>
    <html>
    ... rest of code not shown

<强> session.php文件

<?php 
  session_start();
  session_cache_limiter('public');
?>

<强> logout.php

<?php
    session_start();
    $_SESSION['expire'] = "<META HTTP-EQUIV=\"EXPIRES\" CONTENT=\"Mon, 02 May 2015 21:00:00 GMT\">";
    header('Location: index.php');                                             
?>