Cookie禁用了,Session還能用嗎?詳解

2022-06-12 05:00:11 字數 1672 閱讀 2812

cookie與 session,一般認為是兩個獨立的東西,session採用的是在伺服器端保持狀態的方案,而cookie採用的是在客戶端保持狀態的方案。但為什麼禁用cookie就不能得到session呢?因為session是用session id來確定當前對話所對應的伺服器session,而session id是通過cookie來傳遞的,禁用cookie相當於失去了session id,也就得不到session了。

是不是cookie讓禁用了,session就一定不能用了呢?答案是否定的,即使cookie禁用,session還可以借助於url來和客戶端互動。

session,儲存於伺服器端(預設以檔案方式儲存session),根據客戶端提供的session id來得到使用者的檔案,取得變數的值,session id可以使用客戶端的cookie或者http1.1協議的query_string(就是訪問的url的「?」後面的部分)來傳送給伺服器,然後伺服器讀取session的目錄。也就是說,session id是取得儲存在服務上的session變數的身份證。當**session_start();執行的時候,就在伺服器上產生了乙個session檔案,隨之也產生了與之唯一對應的乙個session id,定義session變數以一定形式儲存在剛才產生的session檔案中。通過session id,可以取出定義的變數。跨頁後,為了使用session,你必須又執行session_start();將又會產生乙個session檔案,與之對應產生相應的session id,用這個session id是取不出前面提到的第乙個session檔案中的變數的,因為這個session id不是開啟它的「鑰匙」。如果在session_start();之前加**session_id($session id);將不產生新的session檔案,直接讀取與這個id對應的session檔案。

php中的session在預設情況下是使用客戶端的cookie來儲存session id的,所以當客戶端的cookie出現問題的時候就會影響session了。必須注意的是:session不一定必須依賴cookie,這也是session相比cookie的高明之處。當客戶端的cookie被禁用或出現問題時,php會自動把session id附著在url中,這樣再通過session id就能跨頁使用session變數了。但這種附著也是有一定條件的,即「php.ini中的session.use_trans_sid = 1「,或者編譯時開啟開啟了「--enable-trans-sid」選項。

用過論壇的朋友都知道,在進入論壇的時候,往往會提示你檢查cookie是否開啟,這是因為大多數論壇都是基於cookie的,論壇用它來儲存使用者名稱、密碼等使用者資訊,方便使用。而且很多朋友都認為cookie不安全(其實不是這樣),往往禁用它。其實在php程式中,我們完全可以用session來代替cookie,它可以不依賴於客戶端是否開啟cookie。

所以,我們可以拋開cookie使用session,即假定使用者關閉cookie的情況下使用session,其實現途徑有以下幾種:

1. 設定php.ini配置檔案中的「session.use_trans_sid = 1」,或者編譯時開啟開啟了「--enable-trans-sid」選項,讓php自動跨頁傳遞session id。

2. 手動通過url傳值、隱藏表單傳遞session id。

3. 用檔案、資料庫等形式儲存session id,在跨頁過程中手動呼叫。

PHP中禁用cookie後的session

我們知道當客戶端瀏覽器把cookie禁掉後,伺服器端的session是沒有辦法正常使用的。因為伺服器端的session是通過sessionid來區分不同使用者的session的,而這個sessionid就是通過客戶端的cookie傳遞到伺服器端的,更嚴格地說,因為在php使用session star...

瀏覽器禁用cookie後使用session

php中的session在預設情況下是使用客戶端的cookie來儲存session id的,所以當客戶端的cookie出現問題的時候就會影響session了。必須注意的是 session不一定必須依賴cookie,這也是 session相比cookie的高明之處。當客戶端的cookie被禁用或出現問...

瀏覽器禁用了cookie怎麼辦

在web開發過程中,cookie是我們常用的功能 最基本的用來儲存服務端返回的jsessionid來識別使用者,甚至儲存其它更多的客戶資訊。假如客戶端瀏覽器禁用了cookie,將會導致很多基於cookie的功能出現異常,甚至無法使用,作為開發者,我們怎麼來解決這種問題呢?筆者碰到的問題是在在通過se...