【问题标题】:php Sessions are not being destroyed even after logout in IE 8 and 9即使在 IE 8 和 9 中注销后,php 会话也不会被破坏
【发布时间】:2012-09-07 08:01:59
【问题描述】:

我试图找出下面这段代码有什么问题,每当我尝试使用 Internet Explorer 注销时,我都无法做到这一点,它只会在多次重新加载或关闭浏览器后注销。

 <?php
//Start session 
session_start();
require("../../class-settings.php");
function write_at_sess_destroy(){
    $time=date('h:i:s A',time());
    $sql="update " . DB_PRE."user_master set `guid` = '',`user_first_login`='0' WHERE user_id ='".  $_SESSION['user']."'";
    $sql_log= "update " . DB_PRE."user_log set logout_time='$time' where user_id='{$_SESSION['user']}' and logger_id='{$_SESSION['DYNAMIC_LOGGER_ID']}'";       
    if(mysql_query($sql))if(mysql_query($sql_log)) return true;
}
if(write_at_sess_destroy()){
    function unset_sessions(){
        session_start();
        if($_SESSION['adminlang'])unset($_SESSION['adminlang']);
        unset($_SESSION['loginID']);
        unset($_SESSION['utype']);
        return true;
    }
    if(session_destroy()){
        header("Location:../../../");
        exit;
    }
    else{
        echo "error...";    
    }
}
?>

【问题讨论】:

  • 你从哪里打电话给unset_sessions?为什么这个函数有session_start
  • 不知道这是否是错误,但 HTTP/1.1 标头需要绝对 URI 作为 » Location: 的参数,而不是相对位置 ../../../ 参见:@ 987654321@
  • 您可以在注销时将会话值设置为false,然后根据该值是否为false来确定登录状态?
  • @donald123 我也试过,但结果是一样的......
  • 对不起@Daniel 我忘了说,我把它放在上面 if(session_destroy)

标签: php internet-explorer session logout


【解决方案1】:

为什么不能简化:

<?php
    session_start();
    require("../../class-settings.php");
    function write_at_sess_destroy(){
        $time=date('h:i:s A',time());
        $sql = "update " . DB_PRE."user_master set `guid` = '',`user_first_login`='0' WHERE user_id ='".  $_SESSION['user']."'";
        $sql_log = "update " . DB_PRE."user_log set logout_time='$time' where user_id='{$_SESSION['user']}' and logger_id='{$_SESSION['DYNAMIC_LOGGER_ID']}'";       
        if(mysql_query($sql))if(mysql_query($sql_log)) return true;
    }
    if(write_at_sess_destroy()){
        session_regenerate_id();
        session_destroy();
        $_SESSION = array();
        header("Location: ../../../");
        exit;
    } else {
        echo mysql_errno() . ": " . mysql_error() . "\n";
    }
?>

【讨论】:

  • @SleepingDragon:如果你的问题显然没有解决,你为什么要接受答案?
猜你喜欢
  • 2013-02-12
  • 1970-01-01
  • 1970-01-01
  • 2019-05-17
  • 2018-07-31
  • 2012-04-02
  • 1970-01-01
  • 2016-02-03
  • 1970-01-01
相关资源
最近更新 更多