2017-02-08 24 views
3

客戶: start_session()創建的cookie(默認):Name: PHPSESSID; Content: 1q2w3e4r5t; Domain: '/'; Expires:...如果會話存儲在文件中,爲什麼仍然使用cookie來存儲它們?

SERVER: 它還創建存儲在一個文件(我的情況):/var/lib/php/sessions。在那裏打電話:sess_1q2w3e4r5t。 (絕對路徑:/var/lib/php/sessions/sess_1q2w3e4r5t

所以我們有兩個物理東西綁定到我剛創建的會話。

  • 兩者有什麼關係?

  • 無論use_only_cookies選項如何,我可以將我的會話存儲在/var/lib/php/sessions嗎?

  • 我有一個$_SESSION['counter']變量的經典示例。這意味着,每當我重新加載example.php頁面時,$_SESSION['counter']遞增(++)一。因此,在按下F5按鈕的循環中,可以說我獲得了55作爲值$_SESSION['counter']。最後是我的那個cookie,但是不是/var/lib...文件。刪除後我得到一個56和循環繼續正常。這只是讓我感興趣,並讓我回答這個問題。會話Cookie是必需的嗎?

  • 仍然有可能的方式,我的網站只存儲會話只在服務器和不使用cookie?

這就是我如何刪除cookie。通知counter值是69

Deleting the cookie

然後F5

are cookies necessary?

+0

咦?如果沒有cookies,你的所有請求都將是無狀態的。 – emaillenin

+0

但是就像我說的,刪除cookie後,'$ _SESSION ['counter']'仍然保持相同的值...糾正我,如果我錯誤地將它作爲一種請求 –

+1

你可能混淆了刪除cookie與刪除會話或會話變量不同?你必須在PHP中使用'unset($ _ SESSION ['counter'])'來丟失*它的值。 –

回答

0

訪問您的網站的訪問者被分配一個唯一的ID 所謂的會話ID。這可以存儲在用戶 一側的cookie中或者在URL中傳播。

  • 同時具有會話和cookie的一點是上述

總之報價:沒有cookies,客戶端將成爲一個陌生來客

0

的Cookie是有這樣客戶端可以知道哪些會話文件是他們的服務器。該cookie值對應於在服務器上創建的文件。

沒有它,服務器將只爲客戶端創建一個新的會話文件,顯然前一個請求中的數據都不會在那裏。

我只能想象你沒有正確刪除cookie。

+0

我會標記會話文件以獲得會話ID:'sess_ + 1q2w3e4r5t'。因此,不需要cookie。 –

+0

那麼,如果客戶是同一個人,那麼您如何知道後續的兩個請求?你只是在談論服務器端的事情。客戶端需要告訴服務器哪個會話是他們的。 – Scopey

相關問題