session
什么是session?
session在計算機中,尤其在網路應用中,稱為"會話控制";具體到web中的session指的就是用戶在瀏覽某個網站時,從進入網站到瀏覽器關閉所經過的這段時間,也就是用戶瀏這個網站所花費的時間,因此從上述的定義中可以看到,session是一個特定的時間概念,
為什么要使用session?
HTTP協議是一種無狀態的協議,即同一個客戶端的本次請求和上次請求沒有對應關系,http服務器并不知道這兩個請求來自同一個客戶端;優點在于減輕服務器的壓力,缺點在于每次請求會傳輸大量重復的內容資訊session提供在PHP腳本中定義全域變數的方法,使得這個全域變數在同一個session中對于所有的PHP腳本文本內都有效,所以,session是基于HTTP服務器的用于保持狀態的方法;session允許通過將資料存盤到HTTP服務器中,以在整個用戶會話程序中保持該資料;所以,session不僅是一個時間概念,還包括了特定的用戶和服務器;
session的作業原理
- 會話由一個唯一識別符號標識,可使用
session_id函式讀取此識別符號,為PHP應用程式啟用會話狀態時,將檢查應用程式中每個頁面請求是否有瀏覽器發送的sessionID值,如果未提供任何sessionID值,則PHP將啟動一個新會話,并將該會話的sessionID值隨回應一起發送到瀏覽器, - 默認情況下,
sessionID值存盤在cookie中,也可以實作在URL中存盤sessionID
只要一直使用相同的sessionID值來發送請求,會話就被視為活動的,如果特定會話的請求間隔超過指定的超時值(以秒為單位),則該會話被視為已過期,如果使用過期的sessionID值發送的請求將生成一個新的會話
和session相關的函式
/*
* session_start
* 描述:啟動新會話或者重用現有會話
* 語法:bool session_start([array $options = []])
* ---在服務器上創建了一個sessionID,并創建了一個存盤session的檔案
* 說明:
* A. $options引數是一個關聯陣列,如果提供的話,則會用其中的專案覆寫"會話配置"中的配置選項;
* B. 如果通過GET或者POST方式,或者使用cookie提交了會話ID,則會重用現有會話
*
* session_id
* 描述:獲取/設定當前會話ID
* 語法:string session_id([string $id])
* 說明:
* A. 如果指定$id引數的值,則使用指定值作為會話ID
* B. 如果設定$id引數的值,必須在呼叫session_start()函式之前呼叫session_id()函式
*
* session_name
* 描述:讀取/設定會話名稱
* 語法:string session_name([string $name])
* 說明:
* A. 如果指定$name引數,session_name()函式會更新會話名稱,并回傳原來的會話名稱;
* B. 如果指定$name引數,必須在呼叫session_start函式之前呼叫session_name()函式
*
* session_destroy
* 描述:銷毀一個會話中的全部資料
* 語法:bool session_destroy()
*
* chrome瀏覽器cookies存盤地:
* ~/Library/Application Support/Google/Chrome/Default/Cookies
* 將Cookies加擴展名sqlite,然后用sqlite工具打開Cookies
*/
PHP配置中session片段
/*
* 在/Applications/XAMPP/etc/php.ini檔案中可以查看下列片段:
*
* session.auto_start(boolean)
* 描述:session.auto_start指定會話模塊是否在請求開始時自動啟動,默認為0(不啟動),一般不進行修改該配置;
*
* session.name(string)
* 描述:指定會話名以用做cookid的名字,只能由字母數字組成,默認為'PHPSESSID';
*
* session.save_handler(string)
* 描述:定義用來存盤和獲取與會話關聯的資料的處理器的名字,默認為files,即檔案;
*
* session.save_path(string)
* 描述:定義傳遞給存盤處理器的引數,如果選擇默認的files檔案處理器,則值則是檔案的路徑;
*
* session.gc_maxlifetime(integer)
* 描述:指定過了多少秒之后資料就會被視為"垃圾"并被清除;
*
* session.gc_probability(integer)、session.gc_divisor(integer)
* 描述:定義在每個會話初始化時啟動gc行程的概率,此概率通過gc_probability/gc_divisor計算,值為1000,表示為千分之一
*
*/
cookie
什么是cookie?
HTTP cookie也叫Web cookie或者瀏覽器cookie,是服務器發送到用戶瀏覽器并保存在瀏覽器上的資料,它會在瀏覽器下一次發起請求時被攜帶并發送到服務器上;HTTP cookie是HTTP標頭的組成部分;session是存盤在服務器端,cookie是存盤在瀏覽器端
cookie的作用
- 會話狀態管理(如用戶登錄狀態、購物車):如十天自動登錄
- 個性化設定(如用戶自定義設定)
- 瀏覽器行為跟蹤(如跟蹤分析用戶資訊)
與cookie相關的函式
/*
* setcookie函式
* 描述:設定cookie
* 語法:bool setcookie(string $name[, string $value = https://www.cnblogs.com/jackw1/p/""[, int $expire = 0[, string $path = ""[, string $domain = ""]]]])
* 說明:
* A. $name引數用于指定cookie名稱;
* B. $value引數用于設定cookie值;
* C. $expire引數用于設定cookie的生命周期(Unix時間戳);
* D. $path引數用于設定服務器上可用cookie的路徑;如果設定為"/",則代表在整個域名內都有效,
* 如果設定為"/foo/",則僅代表在域名內的/foo目錄及其子目錄內有效;
* E. $domain引數用于設定cookie可用的域名范圍(包含子域名);
*
* 注意:會話期cookie是指瀏覽器關閉之后會被自動洗掉,也就是它僅在會話期間有效;
* 會話期cookie不需要指定過期時間(Expire);
*
* 持久cookie:指定一個特定的過期時間(Expire);
*
*/
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/67423.html
標籤:PHP
上一篇:一個程式員的水平能差到什么程度?
下一篇:php命名空間
