再探PHP session

來源:互聯網
上載者:User
以前對session和cookie其實還是模模糊糊的,今天用yii架構的時候遇到 session_regenerate_id(): Session object destruction failed這個錯誤,所以又看了看session的工作機理。


從W3Cschool中截取session的定義:

當您運行一個應用程式時,您會開啟它,做些更改,然後關閉它。這很像一次會話。電腦清楚你是誰。它知道你何時啟動應用程式,並在何時終止。但是在網際網路上,存在一個問題:伺服器不知道你是誰以及你做什麼,這是由於 HTTP 地址不能維持狀態。

通過在伺服器上儲存使用者資訊以便隨後使用,PHP session 解決了這個問題(比如使用者名稱稱、購買商品等)。不過,會話資訊是臨時的,在使用者離開網站後將被刪除。如果您需要永久儲存資訊,可以把資料存放區在資料庫中。

Session 的工作機制是:為每個訪問者建立一個唯一的 id (UID),並基於這個 UID 來儲存變數。UID 儲存在 cookie 中,亦或通過 URL 進行傳導。

我們先來看看session的生命週期,這個對於理解session很重要。

1. session何時建立?

簡單的說Sessinon在使用者訪問第一次訪問伺服器時建立,session是由php,jsp,asp等web語言建立的,訪問靜態html頁面是不會建立的。我們以php為例:

a)當使用者X訪問一個php頁面,如果頁面最開始有session_start()函數,那這個時候伺服器端就會建立一個session,會產生一個session_id。這個ID是唯一的,每個使用者不同。

b) 這個session id會儲存在PHP的$_SESSION變數中,我們同時可以設定cookie在使用者的瀏覽器上。

c) 然後使用者跳轉到網站其他頁面時,只要告訴瀏覽器這個cookie裡儲存的session id,然後伺服器就取出這個session id對應的儲存的資訊,就知道這個使用者是誰,那在另一個頁面也能顯示使用者的這些資訊。

d) session建立之後,就可以儲存其他使用者相關的資訊了,例如儲存使用者購物車的物品資訊。

所以,使用者訪問一個網站,正常來說從開啟到結束(除非session太快失效)都是在同一個session裡,無論他在這個網站中如何跳轉。PHP中 session_id()函數可以看到當前的session_id的資訊。因為一個網站可以有很多個使用者同時訪問,PHP會為每個使用者產生唯一的session_id。這樣不會相互幹擾,因為每個使用者都是由獨立的進程在處理的,使用者A所在的進程儲存了A的session_id, 直到這個session失效。

總之,一般是在使用者登入網站的時候設定好session,然後使用者退出的時候關閉或者清理session(關閉還是清理隨業務需求)。

2. session何時失效?

a) session的失效時間。伺服器會把長時間沒有活動的Session從伺服器記憶體中清除,此時Session便失效。Tomcat中Session的預設失效時間為20分鐘。

b) 調用Session的invalidate方法。


參考:http://www.w3school.com.cn/php/php_sessions.asp

然後常用的幾個PHP的session相關的函數:

session_start ? Start new or resume existing session session開始
session_id ? Get and/or set the current session id 獲得session id
session_status ? Returns the current session status 獲得session status,有三個狀態

  • PHP_SESSION_DISABLED if sessions are disabled.
  • PHP_SESSION_NONE if sessions are enabled, but none exists.
  • PHP_SESSION_ACTIVE if sessions are enabled, and one exists.
  • session_regenerate_id ? Update the current session id with a newly generated one 為現在的session重新分配
    session_destroy ? Destroys all data registered to a session 徹底刪除整個session
    session_unset ? Free all session variables 刪除當前session所儲存的所有變數


    更多請參考:http://www.php.net/manual/en/ref.session.php

  • 聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.