国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

session保存數(shù)據(jù)庫中以及禁用cookie情況下的處理

keithyau / 1204人閱讀

摘要:保存這個(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信息

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的影響

由于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

相關(guān)文章

  • CookieSession 區(qū)別匯總

    摘要:無狀態(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ù)量增大。另一方...

    Kross 評論0 收藏0
  • CookieSession 區(qū)別匯總

    摘要:無狀態(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ù)量增大。另一方...

    Jinkey 評論0 收藏0
  • Servlet第六篇【Session介紹、API、生命周期、應(yīng)用、與Cookie區(qū)別】

    摘要:于是乎服務(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ù)器把用戶的信息以某種...

    Java_oldboy 評論0 收藏0
  • Servlet第六篇【Session介紹、API、生命周期、應(yīng)用、與Cookie區(qū)別】

    摘要:于是乎服務(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ù)器把用戶的信息以某種...

    fox_soyoung 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<