1. 程式人生 > >PHP關於session的理解

PHP關於session的理解

session是一個會話技術,當用戶在瀏覽網頁的時候有些資料需要長時間儲存起來的時候session再好不過了,由於http是無狀態的,無法知道請求人資訊,一次請求結束就沒了,session可以通過sessionid來判斷是誰幹了些什麼,需要儲存什麼。這個sessionid可以是由cookie傳輸到伺服器端,也可以在url中傳遞。

那麼從session_start();到儲存一條資料,伺服器都幹了些什麼呢?怎麼找到對應客戶端發來的請求呢?下面,細細分析

當session開始工作的時候,也就是建立了一個Session會話,那麼在伺服器端就會生成一個session檔案,它是一個文字檔案,是可以檢視得到的,預設路徑在php.ini中可以檢視到。那麼PHP在處理這個的時候會將每個session檔案每次建立的時候都設立一個唯一的ID,就叫做sessionid,這個ID就是用來保證區分使用者的唯一標識,它將以cookie的形式儲存在客戶端,當用戶訪問伺服器的某個檔案時,cookie會自帶將sessionid傳輸到伺服器端,然後PHP開始處理對應的Session檔案。

那麼問題來了,有朋友就遇到如果cookie被禁用了怎麼辦,cookie無法將sessionid返回給伺服器端,該如何處理?詳細答案我在前面有篇文章有全部解決方案。

接下來談談Session機制的生命週期,session檔案在伺服器端預設時儲存1440秒,也就是24分鐘,可以在php.ini檔案中進行修改,不同於cookie的地方有一點也就在這裡了,cookie不設定有效時間的話,當瀏覽器關閉後資料就會被銷燬,而設定了時間限制的話才會在一定時間內保留,並且cookie檔案裡同一個網站儲存的cookie可以是有多個欄位跟有效期,不會因為某個欄位資料到期而整個檔案銷燬,session是針對檔案有效期的。

簡而言之: session開始工作,建立sessionid以及檔案在伺服器端,然後以cookie的形式返回給客戶端進行儲存,每當客戶端發起請求cookie將Sessionid傳輸給伺服器端,PHP進行sessionid匹配輸出相應資料,完成。