PHP Session的用法
在 PHP 中,Session 是一種伺服器端的機制,伺服器使用一種雜湊表的結構(類似於 JSON)來儲存資訊。相比於儲存在客戶端的 Cookie,Session 將使用者互動資訊儲存在了伺服器端,使得同一個客戶端每次和服務端互動時,不需要每次都傳回所有的 Cookie 值,而是隻需要傳回一個 ID 即可,這個 ID 是客戶端第一次訪問伺服器的時候生成的,而且是唯一的。 |
還有一點就是,因為 Cookie 儲存在客戶端,所以使用者有權禁用 Cookie,而 Session 是儲存在伺服器端的,使用者無法禁用。
Session 在 Web 技術中佔有非常重要的地位。由於網頁是一種無狀態的連線程式,無法記錄使用者的瀏覽狀態,所以需要透過 Session 來記錄使用者的有關資訊,以供使用者再次以這個身份對 Web 伺服器發起請求。
Session 中文是“會話”的意思,與 Cookie 類似,都是用來儲存使用者相關資料的,比如使用者名稱、訪問許可權、登陸時間等。與 Cookie 最大不同之處在於 Cookie 是將資料存放於客戶端電腦之中,而 Session 則是將資料存放於伺服器系統之下。
當開啟一個 Session 時,PHP 將會建立一個隨機的 Session ID(例如“t5is1r7ct740dn390kuv3mpcse”),每個使用者的 Session ID 都是唯一的,而且 Session ID 與伺服器上儲存該使用者 Session 資料的文字檔名稱相同。
Session ID 會分別儲存在客戶端和伺服器端兩個位置。
客戶端,使用臨時的 Cookie 儲存在瀏覽器指定目錄中,Cookie 名稱預設為“PHPSESSID”;
伺服器端,以文字檔案形式儲存在指定的 Session 目錄中。
預設情況下,這個 Session ID 將作為一個 Cookie 傳送給 Web 瀏覽器,接下來 PHP 頁面將使用這個 Cookie 來訪問 Session 的資訊。
與 Cookie 相比,Session 擁有以下的優勢:
通常情況下 Session 更加安全,因為 Session 中的資料不會在客戶端和伺服器端來回重複傳遞;
Session 能夠儲存比 Cookie 更多的資訊;
在使用者禁用 Cookie 的情況下,使用一些方法任然能保持 Session 正常工作。
我們可以使用 PHP 建立和儲存 Session 中的資料。在建立一個 Session 後,所有 Session 變數在使用者一次會話期間裡訪問的所有頁面都有效。其工作機制如下圖所示。
Session 預設會以文字的形式儲存在伺服器的臨時目錄中,檔名以“sess_”作為字首,後面加上“Session ID”,例如“sess_t5is1r7ct740dn390kuv3mpcse”。
我們可以在 php.ini 中找到 Session 的相關配置,下面是一些常用的配置資訊:
session.save_handler = files #session 的儲存方式,預設是檔案,還可以是 redis 或者是 memcache session.save_path = "d:/wamp/tmp" #session 檔案的儲存目錄 session.use_cookies = 1 #是否使用 cookie 儲存 session_id session.name = PHPSESSID #客戶端儲存 session_id 的會話名 session.auto_start = 0 #是否自動開啟 session session.cookie_lifetime = 0 #設定客戶端中儲存的 session_id 的過期時間,以秒為單位 session.use_only_cookies=0 #是否只使用 cookie 來處理 session_id session.gc_divisor = 1000 #程式比率 session.gc_probability = 1 #垃圾回收的處理機率 session.gc_maxlifetime = 1440 #設定 session 檔案的過期時間
Session 在以下情況會被刪除,也就是失效:
Session 超時,超時指的是連續一定時間伺服器沒有收到該 Session 所對應客戶端的請求,並且這個時間超過了伺服器設定的 Session 超時的最大時間;
程式呼叫方法主動銷燬 Session;
伺服器關閉或服務停止。
原文來自:
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69955379/viewspace-2694509/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- PHP 的 SESSION 機制PHPSession
- laravel session 與 php session配置LaravelSessionPHP
- PHP中引號的用法PHP
- PHP 不得不提的 session 與 cookiePHPSessionCookie
- PHP中ZendCache用法的小例子PHP
- PHP中的連線字元. 的用法PHP字元
- 另類用法 hyperf/session 實現 API tokenSessionAPI
- 一文搞懂Session和Cookie的用法及區別SessionCookie
- php array_filter() 函式的用法PHPFilter函式
- php的lavarel框架中join和orWhere的用法PHP框架
- InfluxDB簡介與php用法UXPHP
- 關於 PHP Session ID 改變的問題解決PHPSession
- PHP session 儲存方式 file 改為 RedisPHPSessionRedis
- PHP 自定義session儲存 FILE 方式類PHPSession
- PHP 中 bind 的用法 self 和 static 的區別PHP
- PHP yield 高階用法——網路PHP
- PHP sprintf()格式化用法詳解PHP
- PHP 手冊中的匿名函式關聯用法分析PHP函式
- PHP 的異常處理之try和catch用法小結PHP
- Cloud Foundry Session Affinity(Sticky Session)的實現CloudSession
- PHP7中session的值跨頁傳遞失敗的解決辦法PHPSession
- PHP DIY 系列------框架篇:7. 使用 Redis 加速 Session 讀寫PHP框架RedisSession
- PHP 會話(Session)如何實現使用者登陸功能PHP會話Session
- PHP yield from 生成器用法探究 (二)PHP
- 如何運用PHP+REDIS解決負載均衡後的session共享問題PHPRedis負載Session
- PHP 轉 Go,用 Laravel、thinkphp 的用法造了一個 ThinkGo 框架PHPGoLaravel框架
- [20180918]disconnect session和kill session的區別.txtSession
- PHP透過session判斷防止表單重複提交例項PHPSession
- PHP 自定義函式用法及常用函式集合PHP函式
- PHP yield 協程 生成器用法探究 (一)PHP
- keycloak~關於session idle和session max的解釋Session
- session和v$session說明Session
- [提問交流]無法安裝——php5.4.27禁用了session_registerPHPSession
- SessionSession
- cookie與session的使用CookieSession
- MySQL的session過程MySqlSession
- Cassandra的Session會話Session會話
- v$session - 你看到的event真的是session當前的等待事件麼?Session事件