会话没有在Internet Explorer中被破坏

时间:2017-04-12 06:33:56

标签: php session internet-explorer

我有一个logout.php文件实际执行了它所说的内容,通过销毁会话并将它们重定向回登录页面来从应用程序中注销用户。

<?php
    session_start();
    if( isset( $_SESSION ) &&
        !empty( $_SESSION ) )
    {
        $con = mysqli_connect( "localhost",
                               "root",
                               "",
                               "ctp" );

        $associate = $_SESSION[ 'user' ];
        date_default_timezone_set( 'Asia/Kolkata' );
        $tn = time();

        $dateTime = date( "Y-m-d H:i:s",
                          $tn );

        $sql = "INSERT INTO ind_ctp_workflow_log
                VALUES ( 'CTPLogoutButton',
                         'CTP - Logout',
                         '$associate',
                         '$dateTime' )";

        mysqli_query( $con,
                      $sql );

        unset( $_SESSION );
        session_destroy();

        header( "Location:index.php?r=site/login" );    
    }
    else
    {
        echo 'There is no active session<br>\n
        echo '<a href = "index.php?r=site/login">\n'
        echo '    Click here\n';
        echo '</a>\n';
        echo 'to login';
    }
?>

这适用于Chrome,但不适用于IE,它遵循的工作流程为:

1)登录页面 - 未设置会话,因此显示此页面

2)主页 - 会话设置,所以留在这里,否则转到登录页面

3)注销页面 - 删除会话,转到登录页面

4)登录页面 - 会话设置,转到主页

因此我可以理解,会话不会在IE中被删除。这在Mozilla中也可以正常工作,

在Chrome中,Mozilla第4步更改为

4)登录页面 - 未设置会话,留在这里

SO中的问题非常少,而这些问题都发生在4年前,并且对我的案例没有一个非常有说服力的答案。

1 个答案:

答案 0 :(得分:0)

而不是unset($_SESSION),请使用:

$_SESSION = array();
session_destroy();