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標識的文件,從而
獲取到對應的用戶信息.