首頁 > 後端開發 > PHP問題 > php session丟失原因是什麼

php session丟失原因是什麼

藏色散人
發布: 2023-03-08 11:02:02
原創
3450 人瀏覽過

php session遺失原因有:1、客戶端禁用了cookie;2、瀏覽器無法存取cookie;3、php.ini中的「session.use_trans_sid=0」在編譯時沒有開啟「– enable-trans-sid”選項。

php session丟失原因是什麼

本文操作環境:windows7系統、PHP8版、Dell G3電腦。

筆者偶然間接到一個問題,客戶說網站的session總是會遺失,然後找了好久,始終沒有找到啥原因,最後才發現是因為伺服器上時間與網路時間對不上,導致用戶無法登入或登入馬上就登出。在此過程中發現還有可能是其它原因,在此展示,與君共享。

#一般來說,讓SESSION遺失有以下幾點:

#1、用戶端停用了cookie

2、瀏覽器無法存取cookie

3、php.ini中的session.use_trans_sid=0或編譯時沒有開啟–enable-trans-sid選項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使用session,主要途徑有三條:

1、設定php.ini中的session.use_trans_sid = 1或編譯時開啟開啟了–enable-trans- sid選項,讓PHP自動跨頁傳遞session id。

2、手動透過URL傳值、隱藏表單傳遞session id。

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

【推薦學習:《PHP影片教學》】

以上是php session丟失原因是什麼的詳細內容。更多資訊請關注PHP中文網其他相關文章!

相關標籤:
來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板