2015-10-05 70 views
3

我的工作,做了以下第三方PHP服務器上:PHP cookie處理 - 正確的方法? (登錄/註銷)

當用戶登錄:

ini_set("session.name","APPSESSID"); 
session_start(); 

當用戶登出:

unset($_SESSION['user']); 
unset($user); 
session_destroy(); 

問題是,在註銷時,APPSESSID實際上並未在客戶端瀏覽器中被刪除。它在註銷時獲得了不同的值(看起來它變成了所謂的匿名cookie)

這是造成問題的原因,因爲我有一個web套接字API,用於檢查UA是否在其連接請求中發送APPSESSID cookie,這個cookie即使在它從PHP應用程序註銷之後也由客戶端發送,因爲該cookie不會真正被刪除,只是被重寫。

如何確保cookie在註銷時實際上被刪除?

感謝

+1

看到這裏的最高得分答案:http://stackoverflow.com/questions/2241769/php-how-to-destroy-the-session-cookie-correctly –

+2

[RTFM(HTTP:/ /php.net/session_destroy):'不會取消設置任何與會話相關的全局變量,或者取消設置會話cookie。如果你想銷燬appsessid cookie本身,你必須用'setcookie()'調用來解除它。 –

+0

我已經閱讀了@ChrisLear指出的得分最高的答案,並已閱讀我需要刪除的答案。請看下面我對Federioc的回答的回覆。我錯過了什麼?謝謝 – user1361529

回答

1

由於documentation

如果一個cookie被用於傳播的會話ID(默認行爲), 那麼會話cookie必須刪除。 setcookie()可用於 那。

if (ini_get("session.use_cookies")) { 
    $params = session_get_cookie_params(); 
    setcookie(session_name(), '', time() - 42000, 
     $params["path"], $params["domain"], 
     $params["secure"], $params["httponly"] 
    ); 
} 
+0

問題是,即使按照上面的代碼刪除cookie後,它仍然保留在瀏覽器中(用不同的值寫入)。我的登出代碼在這裏http://pastebin.com/y8B55RQS。我在粘貼的登錄代碼中做錯了什麼? – user1361529

+1

用不同的值寫_gets - 你重新啓動會話嗎? – Federkun

+0

AHA!我認爲你是對的。第三方PHP服務器似乎在index.php中做了一個「ini_set('session.name','APPSESSID'); session_start()」,當你註銷它時,加載index.php讓你回到登錄屏幕! !!!!我認爲這應該在用戶登錄屏幕! – user1361529