php中關於會話機制的理解
web伺服器端與客戶端瀏覽器進行通訊時,是基於http協議的.但是http協議是無狀態協議,所謂無狀態是說本次的http請求與下一次請求是單獨的請求,每次請求儲存的資訊都不會儲存.因此會話機制就應運而生,這種機制就是解決這種問題.透過會話機制可以保留通訊資訊,比如使用者的資訊儲存,因此也實現了使用者在使用應用過程中的跟蹤,狀態的維護.
cookie:
cookie機制,是可以將訪問產生的一段資訊儲存在客戶端瀏覽器,進行下一次訪問的時候,會將該資訊帶入請求頭資訊中,將資訊
傳遞到伺服器,從而實現web應用對使用者的資訊跟蹤與維護.
cookie的設定方式: setcookie(name,value,expire); //name:cookie名稱, value:cookie值, expire:cookie的過期時間
當expire過時間設定為0時,瀏覽器關閉,就會刪除cookie
對cookie資訊的獲取: $_COOKIE["name"];
對cookie資訊的修改: $_COOKIE["name"] = value;
刪除cookie的兩種方式:
1> setcookie(name); //直接刪除cookie
2> setcookie(name,value,time()-100); //設定cookie的過期時間小於當前時間
session:
session機制,同樣能實現儲存使用者資訊和維持請求狀態.但是與cookie不同的是,session將儲存的資訊存放在,web伺服器.預設是存放在檔案中,在php.ini配置檔案中,配置session.save_path可以將session產生的檔案存放在該位置,但是需要注意的是,該檔案路勁需要httpd程式的寫許可權比如apache的寫許可權,否則無法儲存session資料.當指定的目錄不存在時,伺服器不會自動建立,而 是需要手動建立. session機制在預設情況下,是基於cookie的.也就是說.在使用session_start();初始化時,web伺服器會為訪問者自動生成一個sessionID 來唯一標識使用者,並且將該ID儲存在客戶端瀏覽器,以cookie機制來儲存,該cookie名稱為固定的,預設在php配置檔案中session.name配置,值為PHPSESSID.該cookie的值是自動生成的,但是在php中可以使用session_id()獲取在瀏覽器儲存的cookie值和session_name()獲取在瀏覽器儲存的cookie名稱.
而在使用過程中儲存的資訊,會存放在伺服器配置的檔案路勁下並且以sess_為字首,以session_id為結尾命名,比如session id為vp8lfqnskjvsiilcp1c4l484d3,那麼session檔名就是sess_vp8lfqnskjvsiilcp1c4l484d3,但是session不僅僅只能基於cookie,因為瀏覽器可以禁用cookie,如果瀏覽器禁用後,客戶端就不能儲存該cookie資訊,從而影響session的使用.
假如瀏覽器禁用cookie後,我們可以使用下面的途徑解決該問題:
1、設定php.ini中的session.use_trans_sid = 1,當客戶端的Cookie被禁用或出現問題時,PHP會自動 把session id附著在URL中,
這樣再透過session id就能跨頁使用session變數了
2、手動透過URL傳值、隱藏表單傳遞session id。
3、用檔案、資料庫等形式儲存session_id,在跨頁過程中手動呼叫。
但是瀏覽器基本上都不會禁用cookie,因為禁用之後,瀏覽器訪問其他應用時都會出現問題.
設定使用session的方式:
session_start(); //初始化session
$_SESSION['name'] = value; // name:要設定的session名稱, value:要設定的session名稱對應的值
$_SESSION['name']; // 獲取名稱為name的session值
session資訊的刪除方式:
需要刪除三個地方儲存的資料,但是首先需要初始化session session_start():
1步: 刪除客戶端瀏覽器儲存的cookie資訊
setcookie(session_name(),session_id(),time()-100); 或者 setcookie(session_name());
2步: 清空session全域性變數
$_SESSION = array(); 或者 session_unset();
3步: 刪除session檔案
session_destroy();
總結:
cookie:透過瀏覽器第一次訪問web應用時透過web伺服器呼叫設定cookie的相關函式比如setcookie(),告訴客戶端瀏覽器設定cookie
資訊,在進行下一次請求web伺服器應用時,瀏覽器就會將儲存的使用者資訊,傳送給web伺服器.從而實現跨頁面獲取使用者資訊.因此也可以說
使用者資訊是維護在客戶端瀏覽器的.
session: 在客戶端訪問伺服器時,透過session_start()為客戶端分配一個sessionID標識.並且將使用者資訊儲存在客戶端檔案.當使用者
下次訪問web伺服器的其他頁面時,瀏覽器會將分配的sessionID以cookie形式串入伺服器,伺服器獲取具有該sessionID標識的檔案,從而
獲取到對應的使用者資訊.
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/2249/viewspace-2801490/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 基於token的會話保持機制會話
- 關於Java中的反射機制Java反射
- 理解的Java中SPI機制Java
- 理解JS中的Event Loop機制JSOOP
- 從原始碼的角度解析Mybatis的會話機制原始碼MyBatis會話
- Java中stream流的filter機制理解JavaFilter
- 理解Linux 中sed命令的工作機制Linux
- ABAP Webdynpro和WebClient UI不同的會話管理機制WebclientUI會話
- PHP 的 SESSION 機制PHPSession
- 關於JavaScript的記憶體機制JavaScript記憶體
- 關於爬蟲 retry 機制的思考爬蟲
- 理解Django 中Call Stack 機制的小DemoDjango
- 【基本思維】關於會計科目、會計分錄中借與貸的理解
- 深入理解 Java 中 SPI 機制Java
- 關於react中setState的深入理解React
- Javascrip—關於this繫結機制的解析(12)Java
- PHP的垃圾回收機制PHP
- 關於事務補償機制
- 關於log file switch and checkpoint機制
- PHP 鎖機制PHP
- 理解 LruCache 機制
- 關於 DOM 的理解
- 關於Vuex的理解Vue
- 關於servlet的理解Servlet
- 關於-this指向的理解
- 關於Swift中Properties的一些理解Swift
- 關於Dart中Future的一些理解Dart
- 關於Vue中插槽的理解和總結Vue
- 關於引用(python中的偽指標)的理解Python指標
- 關於MySQL中的自聯結的通俗理解MySql
- 反射機制的簡答理解反射
- php 反射機制案例PHP反射
- 理解 Dart mixin 機制Dart
- IE瀏覽器關於ajax的快取機制瀏覽器快取
- 關於Delta Lake的ACID事務機制簡介
- 關於協程的理解
- 關於對Host的理解
- Nginx 與 PHP 的執行機制NginxPHP