2016-04-12 74 views
0

有兩個登錄頁面,如果一個頁面被註銷,其他人也會自動註銷如何更改該頁面?如何在不影響其他頁面的情況下注銷頁面?

adminlogout.php

<?php 
    session_start(); 
    unset($_SESSION['ADMIN_UNAME']); 
    session_destroy(); 
    header("location: adminlogin.php?logout=true"); 
?> 

logout.php

<?php 
    session_start(); 
    unset($_SESSION['SESS_MEMBER_ID']); 
    session_destroy(); 
    header("location: login.php"); 
?> 
+1

不使用'session_destroy()' – roullie

+0

正如上面提到的,你正在摧毀整個會話,不這樣做,而不是使您希望從中註銷的登錄無效。 – Epodax

+0

@Epodax除了全局變量,會話還有什麼用途。用戶註銷時是否有必要銷燬它們? – user6181297

回答

0

請刪除session_destroy()函數。 session_destroy()從服務器中刪除具有sessionid請求的完整會話信息。因此這兩個腳本註銷。

adminlogout.php

<?php 
    session_start(); 
    unset($_SESSION['ADMIN_UNAME']); 
    header("location: adminlogin.php?logout=true"); 
?> 

logout.php

<?php 
    session_start(); 
    unset($_SESSION['SESS_MEMBER_ID']); 
    header("location: login.php"); 
?> 
+0

除了全局變量,會話還有什麼用途。用戶註銷時是否有必要銷燬它們? – user6181297

+0

對於來自客戶端(瀏覽器)的特定請求,所有會話數據都存儲在文件tmp文件夾下的文件 - sess_XXXXXXXXXXXXXX。當用戶註銷時只需刪除與用戶有關的信息。在你的情況下,因爲兩個單獨的登錄有adminlogout和註銷 –

+0

然後我們不應該破壞tmp文件夾 – user6181297

0

它很明顯,如果一個類型的用戶註銷對方也會因爲根據你的代碼中被摧毀整個會話兩種退出

session_start(); 
    unset($_SESSION['SESS_MEMBER_ID']); 
    session_destroy();//don't use this instead think some other logic suitable for your system 
    header("location: login.php"); 
0

當您使用session_destroy();您c徹底刪除服務器瞭解您當前會話的所有內容。注意,在當前瀏覽器實例處於打開狀態時會話仍然存在,如果銷燬會話,則會銷燬所有會話全局變量。

如果你想註銷只是管理員或普通用戶,你應該改變一個會話變量來反映這一點。

0

正如其他人已經指出的,問題是session_destroy()的呼籲,因爲這會破壞整個會話。

但我想補充一點,你可能應該考慮在你的會話中使用多維數組以用於不同的目的,甚至更好的是,使用不同的會話,因爲它們在完全不同的區域(例如管理會話應該明確不會與普通用戶會話共享,使用HTTPS cookie等)。

0

取消設置會話變量或使會話變量爲空,在logout.php

adminlogout.php 
    <?php 
     session_start(); 
     $_SESSION['ADMIN_UNAME']=''; 
     header("location: adminlogin.php?logout=true"); 
    ?> 




logout.php 
    <?php 
    session_start(); 
     $_SESSION['SESS_MEMBER_ID']=''; 
     header("Location:login.php"); 

    ?> 
相關問題