2013-09-26 60 views
2

PHP或任何其他服務器端語言如何在客戶機上存儲會話?如何在PHP中訪問會話變量?

你能幫我嗎?

+2

會話不存儲在客戶端,它們存儲在服務器上。 – David

+0

服務器上的會話由自動置於客戶機上的cookie引用。每次訪問都會提供用於查看會話詳細信息的Cookie代碼,通常來自臨時存儲中的文件。如果您開始會話並使用PHP存儲某些內容,請查看您網站的Cookie,然後您會看到一個新的。 – halfer

+0

@David *通常不會(我建議不應該).. *但是,Sessions *可以*完全在Cookie中實現,無需服務器存儲。並且,我認爲有一個(皺眉了?)PHP設置,允許這.. – user2246674

回答

2

會話存儲在服務器上。無論是在文件系統(通常在tmp文件夾內)還是在數據庫內(如果已經設置了數據庫會話處理)。有時,它們將被存儲在緩存守護進程中,如Memcached。無論哪種方式,會話數據都存儲在服務器上,而不是客戶端的機器上。

在客戶端,通常會有一個cookie,其中包含session ID,用於將用戶鏈接到存儲在服務器上的會話數據。在某些情況下,此ID可能會強制附加到URL,這就是爲什麼您有時會在網址中遇到具有PHPSESSID作爲GET參數的網站。

基本上,當您訪問一個網站時,該網站將讀取存儲在您計算機上的cookie內的PHPSESSID。然後它使用該ID來查找與您的訪問有關的會話數據。

+0

sess身份證所以如何PHP存儲PHPSESSID到瀏覽器cookie? – user2820823

+0

@ user2820823通常在向有問題的服務器發出HTTP請求後進行設置。服務器將響應一個HTTP響應,該響應基本上會問您的瀏覽器是否適合在您的計算機上保存cookie數據。見http://en.wikipedia.org/wiki/HTTP_cookie#Setting_a_cookie –

+0

thnx man ....你能告訴我如何編寫一個編譯器來做到這一點? – user2820823

1

PHP在用戶的瀏覽器中存儲cookie。該cookies不存儲任何會話數據,它只是唯一標識用戶。會話數據存儲在服務器上,並與用戶的cookie相關聯。

因此,當用戶發出請求時,存儲在cookie中的會話ID將與請求一起傳遞。服務器可以使用該會話ID來檢索實際的會話數據並使其可用於PHP腳本。

1

它實際上是基於服務器的文件。當你打電話給session_start()時,PHP會在你的服務器硬盤上用你在該會話中隱藏的任何東西創建一個文件。在客戶端,他們得到一個cookie(默認名爲PHPSESSID),其中包含與該文件對應的隨機字符串。然後,PHP使用隨機垃圾收集來刪除舊的會話文件。如果你希望你的會話持續時間超過php.ini中的超時時間,你可以創建自己的會話處理器來執行諸如將它們存儲在memcached或數據庫之類的內容。

這裏的PHP網站上的部分這是有關 http://www.php.net/manual/en/session.configuration.php

0

是 - 這是可能說:「會話[數據存儲]在客戶機上」。

雖然會話數據是通常存儲在服務器側(使用由客戶提供,通常是在cookie的形式的標識符),沒有理由爲什麼會話數據必須存儲服務器端實現相同的語義。

會話提供者可能直接將所有會話數據存儲在cookie中。這意味着所有會話數據都可以存儲在客戶端;有這樣的提供者。

但是,「安全地」使用cookie存儲的工作量更大;即加密和MAC是所需的最小添加。 (見Storing Session Data In Cookies: Problems And Security Concerns To Be Aware Of。)


有效會話數據的唯一的「要求」是,一個瀏覽器會話中,所有的窗口/片必須(能夠)共享相同的會話數據。根據一些規則,Cookie是最簡單的方法,因爲它們是通過每個HTTP請求傳輸的。