在用戶關閉瀏覽器之前,保持用戶登錄PHP網站的最佳方式是什麼?PHP會話或cookie
第一種也是最流行的方式是用$_SESSION
。第二個是通過零作爲setcookie
函數的第三個參數:setcookie(name, value, 0, domain);
在用戶關閉瀏覽器之前,保持用戶登錄PHP網站的最佳方式是什麼?PHP會話或cookie
第一種也是最流行的方式是用$_SESSION
。第二個是通過零作爲setcookie
函數的第三個參數:setcookie(name, value, 0, domain);
由於PHP會議上實際存儲的cookie通過的SID(當然你也可以用其他的方式來設置SID如果你喜歡),就不會簡單地時使用它們有太大差別。
主要區別在於安全性,因爲如果您直接使用cookie,客戶端可以自己查看和/或編輯它們,但對於會話數據存儲在服務器端,因此客戶端無法直接訪問。
因此,如果數據只持續該會話,我更喜歡使用會話。
注意:如果您使用多個服務器來平衡負載,您應該非常小心,因爲會話數據默認存儲在服務器本地。可以在多個服務器上共享會話數據,但這是beyond the scope of this question。或者,您可以將數據存儲在數據庫中。
使用您仍然可以在多個服務器環境中使用會話。通過將會話存儲在memcache中(http://php.net/manual/en/memcached.sessions.php) – Rizon
一個會話是爲了這個目的,所以我會去那。
「會話不依賴於允許Cookie的用戶,而是像令牌一樣允許在用戶打開瀏覽器的情況下訪問和傳遞信息。會話的問題在於,當關閉瀏覽器時,因此,如果您的網站需要登錄,則無法將其保存爲會話,就像它可以作爲cookie一樣,並且用戶每次訪問時都會被迫重新登錄。當然你可以得到兩全其美的好處!一旦你知道每件事情都做了什麼,你可以使用Cookie和會話的組合來使你的網站按照你想要的方式工作。「
我會使用$ _SESSION作爲它的更容易。 :P無論如何,如上所述,決定你的情況..如果你需要讓用戶登錄一段時間,即使瀏覽器已關閉使用cookie,但正確。這可能會對您造成安全威脅!否則使用會話。
我建議你去參加PHP會議。它很簡單,你不必自己處理cookies。
以下是真正銷燬會話的代碼,從PHP手冊中給出的example複製粘貼。
// Initialize the session.
// If you are using session_name("something"), don't forget it now!
session_start();
// Unset all of the session variables.
$_SESSION = array();
// If it's desired to kill the session, also delete the session cookie.
// Note: This will destroy the session, and not just the session data!
if (ini_get("session.use_cookies")) {
$params = session_get_cookie_params();
setcookie(session_name(), '', time() - 42000,
$params["path"], $params["domain"],
$params["secure"], $params["httponly"]
);
}
// Finally, destroy the session.
session_destroy();
關於你的問題:
什麼是更好地使用,以保持用戶登錄,直到他關閉瀏覽器?
確定用戶關閉瀏覽器的時間沒有確定的方法。一種方法是不斷地向服務器發送小的AJAX請求。如果延長的時間內沒有看到請求,請銷燬會話。
另一種方法是偵聽DOM窗口卸載並向服務器發送請求以銷燬會話。
你應該使用$ _SESSION
因爲如果啓用了Cookie,那麼cookie將被反正PHP會話標識符使用。所以編寫另一個cookie不是最佳的。
您希望使用cookie而不是會話的唯一原因是您想要負責平衡負載。因此,如果您有2臺服務器,其中一臺出現故障,則該服務器上的會話將丟失。現在登錄的用戶(在服務器1上有會話)將被要求再次登錄。但是如果他有一個cookie,他不會被要求再次登錄。
cookie被限制爲每個域可以設置20個Cookie和最大尺寸的每個爲4KB
會話實際使用的cookie存儲SID –
@AlvinWong我知道,但我的問題是,什麼是最好的PHP – treng