首頁  >  文章  >  後端開發  >  如何理解php session運作機制

如何理解php session運作機制

清浅
清浅原創
2019-02-14 17:42:143946瀏覽

 

php session運作機制就是客戶端將session id傳入到伺服器中,伺服器再根據session id找到對應的檔案並將其反序列化得到session值,然後儲存的時候先序列化再寫入

今天將要分享的知識點是PHP中的會話運作機制,對於熟悉PHP的開發者來說並不陌生,但是對於剛入門的來說就不是很理解了。接下來在文章中將為大家詳細介紹PHP中的session運行機制,具有一定的參考作用,希望對大家有所幫助

如何理解php session運作機制

【推薦課程:

PHP教學

PHP session運作機制意義:

PHP session 運作機制就是客戶端將session id傳遞到伺服器,伺服器根據session id找到對應的文件,讀取的時候對文件內容進行反序列化就得到session的值,保存的時候先序列化再寫入

PHP session機制分類

在PHP中session有兩種機制,分別為預設機制和由使用者自訂session處理機制。

預設機制

php.ini設定:

session.save_handler = files
是用磁碟檔案來實作PHP會話,它有以下幾部分組成:

session_start()

session_start()是session機制的開始,它具有一定機率開啟垃圾回收。這個機率是根據php.ini的配置決定的,因為在有的系統中session.gc_probability = 0,即機率是0,這時就不具備垃圾回收

為$_session賦值

新增一個新值只會維持在記憶體中,當腳本執行結束的時候,把$_session的值寫入到session_id指定的資料夾中,然後關閉相關資源。這個階段有可能執行更改session_id的操作,例如銷毀一個舊的session_id,產生一個全新的session_id。這一般用在自訂session運算

範例如何理解php session運作機制

if (isset($_COOKIE[session_name()])) {
            setcookie(session_name(),'',time() -42000,'/');//旧session cookie过期
          }
          session_regenerate_id();//这一步会生成新的session_id
         //session_id()返回的是新的值

寫入session動作

##在腳本結束的時候會執行session寫入操作,把$_session中的值寫入到session_id命名的檔案中,可能已經存在,可能需要建立新的檔案。

 

銷毀session

session發出去的cookie一般是即時cookie,保存在記憶體中,當瀏覽器關閉後,才會過期,但是如果只是想退出登錄,而不是關閉瀏覽器,那麼就需要在程式碼裡銷毀session,方法有很多。 範例:

1. setcookie(session_name(),session_id(),time() -8000000,..);//退出登录前执行
2. usset($_SESSION);//这会删除所有的$_SESSION数据,刷新后,有COOKIE传过来,但是没有数据。
3. session_destroy();//这个作用更彻底,删除$_SESSION 删除session文件,和session_id

#使用者自訂session處理機制

php.ini配置

session.save_handler = user

使用者自訂處理機制可分為以下幾部分

session_start()

執行open( $save_path,$session_name)語句開啟session操作句柄

如何理解php session運作機制執行read($id)從中讀取資料

注意
:$save_path在此情況下直接傳回true

腳本執行結束

執行write($id,$sess_data)語句
######銷毀session######## #要注意如果使用者需要銷毀session則要先執行destroy再執行第2步################總結:以上就是本篇文章全部內容了,希望對大家有所幫助。 ############php中文網學習專題###:###php session###(包含圖文、影片、案例)#######

以上是如何理解php session運作機制的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn