摘要:保存這個(gè)的方式可以采用,這樣在交互過程中瀏覽器可以自動的按照規(guī)則把這個(gè)標(biāo)識發(fā)揮給服務(wù)器。存放數(shù)據(jù)到數(shù)據(jù)庫中的默認(rèn)存放是通過建立一個(gè)名為的文件進(jìn)行存放。
什么是session
HTTP協(xié)議是無狀態(tài)的,我們在瀏覽一個(gè)網(wǎng)站的時(shí)候 網(wǎng)站并不知道你是誰,為了解決這一點(diǎn)于是有了==會話管理==
會話管理主要包括cookie和session。cookie可以在客戶端記錄下信息,而session則是記錄信息在服務(wù)器上。典型的應(yīng)用場景:當(dāng)我們登錄一個(gè)網(wǎng)站,我們的登錄信息就會存放在session當(dāng)中,接下來在一些需要用戶登錄下才能操作的地方就可以通過session來判斷用戶的合法性。用戶每次登錄得到的==會話ID==是唯一的,這個(gè)會話ID可以保存在客戶端中或者進(jìn)行網(wǎng)絡(luò)傳輸。客戶端也就可以通過cookie或者url傳輸來傳遞這個(gè)會話ID獲取存在服務(wù)器上的session信息
當(dāng)程序需要為某個(gè)客戶端的請求創(chuàng)建一個(gè)session的時(shí)候,服務(wù)器首先檢查這個(gè)客戶端的請求里是否已包含了一個(gè)session標(biāo)識-稱為sessionid,如果已包含一個(gè)sessionid則說明以前已經(jīng)為此客戶端創(chuàng)建過session,服務(wù)器就按照sessionid把這個(gè)session檢索出來使用(如果檢索不到,可能會新建一個(gè)),如果客戶端請求不包含sessionid,則為此客戶端創(chuàng)建一個(gè)session并且生成一個(gè)與此session相關(guān)聯(lián)的sessionid,sessionid的值應(yīng)該是一個(gè)既不會重復(fù),又不容易被找到規(guī)律以仿造的字符串,這個(gè)sessionid將被在本次響應(yīng)中返回給客戶端保存。保存這個(gè)sessionid的方式可以采用cookie,這樣在交互過程中瀏覽器可以自動的按照規(guī)則把這個(gè)標(biāo)識發(fā)揮給服務(wù)器。
存放session數(shù)據(jù)到數(shù)據(jù)庫中session的默認(rèn)存放是通過建立一個(gè)名為sessionID的文件進(jìn)行存放。
使用MySQL保存session會話較files有很多優(yōu)點(diǎn):
1) 有利于分布式系統(tǒng),files只能保存在一臺機(jī)器上
2) 有利于大訪問量的系統(tǒng),使用files時(shí)每個(gè)session保存在一個(gè)文件中,目錄會超級大,查找session文件會比較困難。
由于cookie可以被人為的禁止,服務(wù)端就無法在用戶本地保存session id,我們需要一種變通的方法來實(shí)現(xiàn)session機(jī)制。
實(shí)現(xiàn)過程更改php.ini文件。
找到
//php默認(rèn)保存session的方式 session.save_handler=files //使用cookie(session cookie)來存儲session id session.use_cookies = 1 //只使用session cookie來存儲session id。 session.use_only_cookies = 1 //session cookie的名稱為PHPSESSID。 session.name = PHPSESSID //seesion cookie的生存周期,默認(rèn)情況下,瀏覽器一旦關(guān)閉,session就會被銷毀 session.cookie_lifetime = 0 //讓PHP自動跨頁傳遞session id session.use_trans_sid = 0;
修改為
//把session的模式改成用戶自定義 session.save_handler=user session.use_cookies = 0 session.use_only_cookies = 0 //讓PHP自動跨頁傳遞session id session.use_trans_sid = 1
通過session_set_save_handler() 設(shè)置用戶自定義會話存儲函數(shù)
測試代碼//Database CREATE TABLE `Session` ( `Session_Id` varchar(255) COLLATE utf8_unicode_ci NOT NULL, `Session_Expires` datetime NOT NULL, `Session_Data` text COLLATE utf8_unicode_ci, PRIMARY KEY (`Session_Id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; SELECT * FROM mydatabase.Session;
session.php
link = $link; return true; }else{ return false; } } public function close() { mysqli_close($this->link); return true; } public function read($id) { $result = mysqli_query($this->link,"SELECT Session_Data FROM Session WHERE Session_Id = "".$id."" AND Session_Expires > "".date("Y-m-d H:i:s")."""); if($row = mysqli_fetch_assoc($result)){ var_dump($row); return $row["Session_Data"]; }else{ return ""; } } public function write($id, $data) { $DateTime = date("Y-m-d H:i:s"); $NewDateTime = date("Y-m-d H:i:s",strtotime($DateTime." + 1 hour")); $result = mysqli_query($this->link,"REPLACE INTO Session SET Session_Id = "".$id."", Session_Expires = "".$NewDateTime."", Session_Data = "".$data."""); if($result){ return true; }else{ return false; } } public function destroy($id) { $result = mysqli_query($this->link,"DELETE FROM Session WHERE Session_Id ="".$id."""); if($result){ return true; }else{ return false; } } public function gc($maxlifetime) { $result = mysqli_query($this->link,"DELETE FROM Session WHERE ((UNIX_TIMESTAMP(Session_Expires) + ".$maxlifetime.") < ".$maxlifetime.")"); if($result){ return true; }else{ return false; } } } $handler = new SysSession(); session_set_save_handler($handler, true); ?>
page1.php
測試"; ?>
page2.php
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/23007.html
摘要:無狀態(tài)協(xié)議無狀態(tài)協(xié)議,是指協(xié)議對于事務(wù)處理沒有記憶能力。缺少狀態(tài)意味著如果后續(xù)處理需要前面的信息,則它必須重傳,這樣可能導(dǎo)致每次連接傳送的數(shù)據(jù)量增大。是通過客戶端保持狀態(tài)的解決方案。而這次,信息則存放在請求頭了。 HTTP無狀態(tài)協(xié)議 HTTP無狀態(tài)協(xié)議,是指協(xié)議對于事務(wù)處理沒有記憶能力。缺少狀態(tài)意味著如果后續(xù)處理需要前面的信息,則它必須重傳,這樣可能導(dǎo)致每次連接傳送的數(shù)據(jù)量增大。另一方...
摘要:無狀態(tài)協(xié)議無狀態(tài)協(xié)議,是指協(xié)議對于事務(wù)處理沒有記憶能力。缺少狀態(tài)意味著如果后續(xù)處理需要前面的信息,則它必須重傳,這樣可能導(dǎo)致每次連接傳送的數(shù)據(jù)量增大。是通過客戶端保持狀態(tài)的解決方案。而這次,信息則存放在請求頭了。 HTTP無狀態(tài)協(xié)議 HTTP無狀態(tài)協(xié)議,是指協(xié)議對于事務(wù)處理沒有記憶能力。缺少狀態(tài)意味著如果后續(xù)處理需要前面的信息,則它必須重傳,這樣可能導(dǎo)致每次連接傳送的數(shù)據(jù)量增大。另一方...
摘要:于是乎服務(wù)器向用戶瀏覽器發(fā)送了一個(gè)名為的,它的值是的值。標(biāo)記著該用戶已經(jīng)登陸了跳轉(zhuǎn)到其他頁面,告訴用戶成功登陸了。注冊多個(gè)用戶,不斷發(fā)帖子,擾亂正常發(fā)帖秩序。在處理表單的中刷新。監(jiān)聽用戶提交事件。 什么是Session Session 是另一種記錄瀏覽器狀態(tài)的機(jī)制。不同的是Cookie保存在瀏覽器中,Session保存在服務(wù)器中。用戶使用瀏覽器訪問服務(wù)器的時(shí)候,服務(wù)器把用戶的信息以某種...
摘要:于是乎服務(wù)器向用戶瀏覽器發(fā)送了一個(gè)名為的,它的值是的值。標(biāo)記著該用戶已經(jīng)登陸了跳轉(zhuǎn)到其他頁面,告訴用戶成功登陸了。注冊多個(gè)用戶,不斷發(fā)帖子,擾亂正常發(fā)帖秩序。在處理表單的中刷新。監(jiān)聽用戶提交事件。 什么是Session Session 是另一種記錄瀏覽器狀態(tài)的機(jī)制。不同的是Cookie保存在瀏覽器中,Session保存在服務(wù)器中。用戶使用瀏覽器訪問服務(wù)器的時(shí)候,服務(wù)器把用戶的信息以某種...
閱讀 2436·2021-10-09 09:44
閱讀 3792·2021-09-22 15:43
閱讀 2925·2021-09-02 09:47
閱讀 2539·2021-08-12 13:29
閱讀 3871·2019-08-30 15:43
閱讀 1680·2019-08-30 13:06
閱讀 2189·2019-08-29 16:07
閱讀 2745·2019-08-29 15:23