2017-04-12 109 views
0

我有一個logout.php文件,它實際上完成了它所說的操作,通過銷燬會話並將它們重定向回登錄頁面,從應用程序註銷用戶。在Internet Explorer中會話沒有被破壞

<?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'; 
    } 
?> 

這正常的瀏覽器,但不能在IE瀏覽器,它遵循的工作流程是:

1)登錄頁 - 沒有設置會話,因此顯示此頁

2)主頁 - 會話設置,所以留在這兒,否則去到登錄頁面

3)的註銷頁面 - 刪除會話,請登錄頁面

4)登錄頁面 - 會話集,去主頁

因此我可以理解,會話不會在IE中被刪除。這工作正常,在Mozilla也

在瀏覽器,Mozilla的第4步更改

4)登錄頁 - 沒有設置會議,留在這兒

有在所以很少有問題,而這些都是所有4年前,對於我的情況並沒有一個非常令人信服的答案。

+0

此$ _SESSION =陣列(); –

+0

你可以發佈你的登錄頁嗎?你可能想在你的會話中設置一個索引,比如$ _SESSION('is_logged_in')... – chickenchilli

+0

@chickenchilli登錄頁面是用yii框架編寫的。所以它有跨不同頁面的模塊。並沒有具體的登錄頁面 –

回答

0

代替unset($_SESSION),使用:

$_SESSION = array(); 
session_destroy(); 
使用
+0

這不適合我,我已經取代它,但同樣的問題仍然存在 –

+0

我唯一的猜測是IE瀏覽器正在緩存頁面,不會放棄它。嘗試註銷並重定向後,如果刷新頁面,它是否仍顯示您已登錄? – Difster

+0

註銷後刷新頁面,關閉並打開選項卡,重啓IE,重啓系統,重啓服務器!這是否是因爲該項目是在框架中構建的? –