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

資訊專欄INFORMATION COLUMN

session保存數據庫中以及禁用cookie情況下的處理

keithyau / 1211人閱讀

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

什么是session

HTTP協議是無狀態的,我們在瀏覽一個網站的時候 網站并不知道你是誰,為了解決這一點于是有了==會話管理==
會話管理主要包括cookie和session。cookie可以在客戶端記錄下信息,而session則是記錄信息在服務器上。典型的應用場景:當我們登錄一個網站,我們的登錄信息就會存放在session當中,接下來在一些需要用戶登錄下才能操作的地方就可以通過session來判斷用戶的合法性。用戶每次登錄得到的==會話ID==是唯一的,這個會話ID可以保存在客戶端中或者進行網絡傳輸。客戶端也就可以通過cookie或者url傳輸來傳遞這個會話ID獲取存在服務器上的session信息

session的原理

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

存放session數據到數據庫中

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

禁用cookie的影響

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

實現過程

更改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的生存周期,默認情況下,瀏覽器一旦關閉,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() 設置用戶自定義會話存儲函數

測試代碼
//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

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/23007.html

相關文章

  • CookieSession 區別匯總

    摘要:無狀態協議無狀態協議,是指協議對于事務處理沒有記憶能力。缺少狀態意味著如果后續處理需要前面的信息,則它必須重傳,這樣可能導致每次連接傳送的數據量增大。是通過客戶端保持狀態的解決方案。而這次,信息則存放在請求頭了。 HTTP無狀態協議 HTTP無狀態協議,是指協議對于事務處理沒有記憶能力。缺少狀態意味著如果后續處理需要前面的信息,則它必須重傳,這樣可能導致每次連接傳送的數據量增大。另一方...

    Kross 評論0 收藏0
  • CookieSession 區別匯總

    摘要:無狀態協議無狀態協議,是指協議對于事務處理沒有記憶能力。缺少狀態意味著如果后續處理需要前面的信息,則它必須重傳,這樣可能導致每次連接傳送的數據量增大。是通過客戶端保持狀態的解決方案。而這次,信息則存放在請求頭了。 HTTP無狀態協議 HTTP無狀態協議,是指協議對于事務處理沒有記憶能力。缺少狀態意味著如果后續處理需要前面的信息,則它必須重傳,這樣可能導致每次連接傳送的數據量增大。另一方...

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

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

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

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

    fox_soyoung 評論0 收藏0

發表評論

0條評論

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