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

資訊專欄INFORMATION COLUMN

Laravel Sessionid 處理機制

BWrong / 710人閱讀

摘要:在的配置文件中可以設置,比如這個項目中設置名稱為我們可以看到刷新頁面,查看,會發現一個名稱為的,名字就是我們自定義的。而這種加密方式是每次加密的結果都不同,所以表現為的值每次都發生了變化,而實際上并沒有改變。

在 Laravel 的配置文件 config/session.php 中可以設置 Session Cookie Name,比如這個項目中設置名稱為“sns_session”:

/*
|--------------------------------------------------------------------------
| Session Cookie Name
|--------------------------------------------------------------------------
|
| Here you may change the name of the cookie used to identify a session
| instance by ID. The name specified here will get used every time a
| new session cookie is created by the framework for every driver.
|
*/
 
"cookie" => "sns_session",

我們可以看到刷新頁面,查看 cookie,會發現一個名稱為 sns_session 的 cookie,名字就是我們自定義的。

這個 sessionid 就是 cookie 和 session 聯系的橋梁,服務器通過這個 sessionid 判斷來自哪個客戶端的請求。

Laravel 的 sessionid 每次發生變化

但是,每次刷新頁面,這個 cookie 值都會發生改變!那么這樣服務器如何保持會話呢?因為你的 sessionid 總是在變。

我們在 vendor/laravel/framework/src/Illuminate/Session/Store.php 的 save 方法中調試一下,打印一下這里的調用棧:

/**
 * {@inheritdoc}
 */
public function save()
{
    $this->addBagDataToSession();
 
    $this->ageFlashData();
 
    $this->handler->write($this->getId(), $this->prepareForStorage(serialize($this->attributes)));
 
    $this->started = false;
 
    dd(debug_backtrace(DEBUG_BACKTRACE_PROVIDE_OBJECT,5));
}

每次刷新頁面,這個 Store 對象的 id 屬性其實是沒有變化的,這個屬性就是 sessionid 這個 cookie 的值。也就是說,sessionid 的值并不是每次發生變化,而是寫 cookie 的時候,值發生了變化。

Laravel 對 cookie 進行加密

在 vendor/laravel/framework/src/Illuminate/Cookie/Middleware/EncryptCookies.php 中的 encrypt 方法找到了原因,這個中間件對所有 cookie 值進行了加密處理,它被包含在 web 中間件。

protected function encrypt(Response $response)
{
    foreach ($response->headers->getCookies() as $cookie) {
        if ($this->isDisabled($cookie->getName())) {
            continue;
        }
 
        $response->headers->setCookie($this->duplicate(
            $cookie, $this->encrypter->encrypt($cookie->getValue())
        ));
    }
    return $response;
}

而這種加密方式是每次加密的結果都不同,所以表現為 sessionid 的值每次都發生了變化,而實際上并沒有改變。在需要用到這個 cookie 的時候會被解密回去。

Laravel 框架這樣設計的目的可能是為了防止 session 劫持吧!考慮還是比較全面的!

其他補充知識 原生 PHP 設置 session 名稱

session_name() 函數:

";
?>

session_name() 函數返回當前會話名稱。 如果指定 name 參數, session_name() 函數會更新會話名稱, 并返回 原來的 會話名稱。

請求開始的時候,會話名稱會被重置并且存儲到 session.name 配置項。 因此,要想設置會話名稱,那么對于每個請求,都需要在 調用 session_start() 或者 session_register() 函數之前調用 session_name() 函數。

COOKIE和SESSION的區別和關系

COOKIE保存在客戶端,而SESSION則保存在服務器端

從安全性來講,SESSION的安全性更高

從保存內容的類型的角度來講,COOKIE只保存字符串(及能夠自動轉換成字符串)

從保存內容的大小來看,COOKIE保存的內容是有限的,比較小,而SESSION基本上沒有這個限制

從性能的角度來講,用SESSION的話,對服務器的壓力會更大一些

SEEION依賴于COOKIE,但如果禁用COOKIE,也可以通過url傳遞

(本文為小談博客原創,轉載請注明出處!原文地址:https://blog.tanteng.me/2017/...)


大家好,我的新課程《圖解HTTP精華解讀》開始報名了

報名地址:https://segmentfault.com/l/15...

本次課程內容是對《圖解HTTP》這本書的精華解讀,無論你是否讀過這本書,我們可以一起全面梳理一下關于 HTTP 的知識點。

課程目標

不僅是對這本書的知識總結,同時也會結合工作和個人理解從不同角度講解 HTTP 的知識,重點補充 websocket 的應用以及 HTTP/2 的介紹

面向人群

希望加深對 HTTP 協議了解的人,或全面梳理復習 HTTP 知識點的人

難度級別

理解比較簡單,但知識點很多,內容很重要

主要內容

從輸入 URL 到頁面展示的過程發生了什么?

HTTP 協議基礎(無狀態,持久連接,報文,狀態碼,Cookie等)

為什么使用 HTTPS?HTTP 的缺點和不足

WEB 安全防范(防注入,CSRF 攻擊及原理)

websocket 原理

簡單演示 websocket 服務端搭建和客戶端交互過程

HTTP/2 介紹

讓我們一起開啟 HTTP 之旅!

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

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

相關文章

  • session和cookie機制laravel框架下相關應用

    摘要:服務器檢查該,以此來辨認用戶狀態。五下的相關應用應用在中配置如下配置項用于設置存儲方式,默認是,即存儲在文件中,該文件位于配置項配置的路徑,即。配置項用于設置有效期,默認為分鐘。配置項用于配置數據是否加密。 一、cookie的由來 ??當用戶訪問某網站時,web服務器會將部分信息保存到本地計算機上,當用戶再次關顧該網站時,服務器會去查看用戶是否登錄過該網站,如果登錄過,就會將這些記錄在...

    NicolasHe 評論0 收藏0
  • Laravel深入學習11 - 接口分離原則

    摘要:實際上,本原則要求接口必須是粒度明確的。當你的代碼不符合接口分離原則時,那也肯定違背了單一責任原則。接口分離原則本原則是指在實現類中對于接口中的方法并不強制去實現使用不到的方法。 聲明:本文并非博主原創,而是來自對《Laravel 4 From Apprentice to Artisan》閱讀的翻譯和理解,當然也不是原汁原味的翻譯,能保證90%的原汁性,另外因為是理解翻譯,肯定會有錯誤...

    lwx12525 評論0 收藏0
  • Laravel深入學習7 - 框架的擴展

    摘要:組件擴展通常有兩種方法向容器中綁定自己的接口實現痛過使用工廠模式實現的類注冊自己的擴展。類庫管理類以工廠模式實現,負責諸如緩存等驅動的實例化。閉包須要傳入繼承自和容器的實例化對象。當完成擴展之后要記住中替換成自己的擴展名稱。 聲明:本文并非博主原創,而是來自對《Laravel 4 From Apprentice to Artisan》閱讀的翻譯和理解,當然也不是原汁原味的翻譯,能保證9...

    yuanxin 評論0 收藏0
  • Laravel 的 Session機制簡介

    摘要:我們在這個類中的方法看到如下代碼,一個典型的過濾器,在這個中獲取的方法是。,整個初始化的過程總結下巧妙的使用了面向對象的接口方式,為我們提供了各種各樣不同的存儲方式,一旦我們了解了存儲方式和加密規則,讓不同的容器進行共享的目的也可以達到 前些天,為了解答一個問題,就去研究了Laravel的源碼,講講我的收獲:這個是問題源:http://segmentfault.com/q/101000...

    kelvinlee 評論0 收藏0
  • Laravel學習筆記之Session源碼解析(上)

    摘要:然后中間件使用方法來啟動獲取實例,使用類來管理主要分為兩步獲取實例,主要步驟是通過該實例從存儲介質中讀取該次請求所需要的數據,主要步驟是。 說明:本文主要通過學習Laravel的session源碼學習Laravel是如何設計session的,將自己的學習心得分享出來,希望對別人有所幫助。Laravel在web middleware中定義了session中間件IlluminateSess...

    NervosNetwork 評論0 收藏0

發表評論

0條評論

BWrong

|高級講師

TA的文章

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