PHP SESSION 機制

來源:互聯網
上載者:User
原文來自



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將會自動登出回收。若是使用者想要手動退出呢,可以:

 

這樣便是一個基本的使用者登入登出系統流程。其中還有很多地方可以做安全處理的。這裡將不一一道來。原文來自

  • 聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.