原文來自
PHP session 變數用於儲存有關使用者會話的資訊,或更改使用者會話的設定。Session 變數儲存的資訊是單一使用者的,並且可供應用程式中的所有頁面使用。當你在瀏覽器訪問一個網站的時候,網站的後台為你開啟了一個回話,這個回話就是session。它可以儲存你的一些重要的資訊。它會分配給你一個ID,你何時啟動它了,何時關閉它了。通過伺服器上儲存的資訊,方便隨後使用。它有這麼多的好處強項。但是……當你關閉了這個網頁。一切都回到瞭解放前,它忘記了你。唯有儲存到資料庫中,才能真正的做到它日後都記得你。session的工作機制是:每一個訪問者都有一個唯一的ID,並且基於UID來儲存資訊到伺服器。UID儲存在cookie中,通過URL可以傳導。有了這個唯一的ID,你在當前訪問的網頁中隨處跳轉它還是能夠記住你的ID,從而實現給你提供你儲存在伺服器的準確資訊(如:使用者名稱,購物車等)。
使用session
使用session首先要確定你的伺服器是否支援session。你可以通過 phpinfo() 查看PHP配置資訊。找到看你的配置資訊中是否存在session 模組上面的session_support 值為 enable 的則說明你能正常的使用session了。如果沒有session這個模組你必須先去php.ini啟用session 組件。另外。php.ini 中session.save_handle = files,才能正常的使用session。
session_start()
session_start() 函數必須位於 標籤之前,在session_start()前不允許有輸出。session_start()是session機制的開始。開始之後,session會開啟記憶體回收機制,因為session是存放檔案當中的,則不可能不回收,否則佔用太多會導致一系列的系統問題。而PHP本身的記憶體回收機制對session來說是無效的,session的回收是指刪除儲存的檔案。session回收的機率在php.ini中有定義。session.gc_probability系統預設的是1,但是有些系統的session.gc_probability值是0,這也就是說回收的機率是0,這時系統會通過cron指令碼來實現記憶體回收機制。另外,session配置項中有session.gc_maxlifetime 這麼一項,這時配置session到期時間長度的,預設是1440,24分鐘。這個不建議設定的太小,因為session回收需要根據它。session開啟之後,便可以為session賦值。伺服器會儲存session變數。儲存和取回session 變數的正確方式是使用 $_SESSION 變數。
儲存Session
新添加的key值,這個值則會儲存在記憶體當中,當指令碼執行完畢後,session就會被儲存到指定的session_id 檔案。如果已經存在,則可能需要建立新的檔案。在php.ini設定的回收時間內會銷毀session_id的檔案。
讀取Session
讀取session 方式如下:
session關鍵字$_SESSION['索引值'];
銷毀Session
刪除某些 session 資料,除了可以使用 unset() ,還可以使用 session_destroy() 函數。
案例:
利用session實現使用者登入和登出session的特性之一是安全,所以用它來實現登入將會是一個很好的方案。整個登入的流程大概如下。使用者進入登入頁面===>>輸入正確的使用者賬戶密碼===>>伺服器端指令碼驗證成功後,開啟一個session回話,儲存使用者ID($_SESSION['uid'])和使用者名稱($_SESSION['user_name'])===>>跳轉它網站中的其他頁面,利用($_SESSION['user_name'])顯示使用者姓名,必要時可以通過$_SESSION['u_id']等到使用者ID===>>使用者退出登入( unset($_SESSION) )登入頁面中包含以下代碼:
登入表單
登入成功跳轉之後。在其他的頁面,如選購商品、產生交易訂單等頁面,需要用到使用者資訊的頁面可以使用以下方式獲得使用者資訊
之後如果使用者直接退出了瀏覽器,或者關閉了網站。session在指定的回收時間內,session將會自動登出回收。若是使用者想要手動退出呢,可以:
這樣便是一個基本的使用者登入登出系統流程。其中還有很多地方可以做安全處理的。這裡將不一一道來。原文來自