成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

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

keithyau / 1212人閱讀

摘要:保存這個的方式可以采用,這樣在交互過程中瀏覽器可以自動的按照規(guī)則把這個標(biāo)識發(fā)揮給服務(wù)器。存放數(shù)據(jù)到數(shù)據(jù)庫中的默認存放是通過建立一個名為的文件進行存放。

什么是session

HTTP協(xié)議是無狀態(tài)的,我們在瀏覽一個網(wǎng)站的時候 網(wǎng)站并不知道你是誰,為了解決這一點于是有了==會話管理==
會話管理主要包括cookie和session。cookie可以在客戶端記錄下信息,而session則是記錄信息在服務(wù)器上。典型的應(yīng)用場景:當(dāng)我們登錄一個網(wǎng)站,我們的登錄信息就會存放在session當(dāng)中,接下來在一些需要用戶登錄下才能操作的地方就可以通過session來判斷用戶的合法性。用戶每次登錄得到的==會話ID==是唯一的,這個會話ID可以保存在客戶端中或者進行網(wǎng)絡(luò)傳輸??蛻舳艘簿涂梢酝ㄟ^cookie或者url傳輸來傳遞這個會話ID獲取存在服務(wù)器上的session信息

session的原理

當(dāng)程序需要為某個客戶端的請求創(chuàng)建一個session的時候,服務(wù)器首先檢查這個客戶端的請求里是否已包含了一個session標(biāo)識-稱為sessionid,如果已包含一個sessionid則說明以前已經(jīng)為此客戶端創(chuàng)建過session,服務(wù)器就按照sessionid把這個session檢索出來使用(如果檢索不到,可能會新建一個),如果客戶端請求不包含sessionid,則為此客戶端創(chuàng)建一個session并且生成一個與此session相關(guān)聯(lián)的sessionid,sessionid的值應(yīng)該是一個既不會重復(fù),又不容易被找到規(guī)律以仿造的字符串,這個sessionid將被在本次響應(yīng)中返回給客戶端保存。保存這個sessionid的方式可以采用cookie,這樣在交互過程中瀏覽器可以自動的按照規(guī)則把這個標(biāo)識發(fā)揮給服務(wù)器。

存放session數(shù)據(jù)到數(shù)據(jù)庫中

session的默認存放是通過建立一個名為sessionID的文件進行存放。
使用MySQL保存session會話較files有很多優(yōu)點:
1) 有利于分布式系統(tǒng),files只能保存在一臺機器上
2) 有利于大訪問量的系統(tǒng),使用files時每個session保存在一個文件中,目錄會超級大,查找session文件會比較困難。

禁用cookie的影響

由于cookie可以被人為的禁止,服務(wù)端就無法在用戶本地保存session id,我們需要一種變通的方法來實現(xiàn)session機制。

實現(xiàn)過程

更改php.ini文件。
找到

//php默認保存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的生存周期,默認情況下,瀏覽器一旦關(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://systransis.cn/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ā)送了一個名為的,它的值是的值。標(biāo)記著該用戶已經(jīng)登陸了跳轉(zhuǎn)到其他頁面,告訴用戶成功登陸了。注冊多個用戶,不斷發(fā)帖子,擾亂正常發(fā)帖秩序。在處理表單的中刷新。監(jiān)聽用戶提交事件。 什么是Session Session 是另一種記錄瀏覽器狀態(tài)的機制。不同的是Cookie保存在瀏覽器中,Session保存在服務(wù)器中。用戶使用瀏覽器訪問服務(wù)器的時候,服務(wù)器把用戶的信息以某種...

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

    摘要:于是乎服務(wù)器向用戶瀏覽器發(fā)送了一個名為的,它的值是的值。標(biāo)記著該用戶已經(jīng)登陸了跳轉(zhuǎn)到其他頁面,告訴用戶成功登陸了。注冊多個用戶,不斷發(fā)帖子,擾亂正常發(fā)帖秩序。在處理表單的中刷新。監(jiān)聽用戶提交事件。 什么是Session Session 是另一種記錄瀏覽器狀態(tài)的機制。不同的是Cookie保存在瀏覽器中,Session保存在服務(wù)器中。用戶使用瀏覽器訪問服務(wù)器的時候,服務(wù)器把用戶的信息以某種...

    fox_soyoung 評論0 收藏0

發(fā)表評論

0條評論

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