摘要:在的配置文件中可以設(shè)置,比如這個(gè)項(xiàng)目中設(shè)置名稱為我們可以看到刷新頁(yè)面,查看,會(huì)發(fā)現(xiàn)一個(gè)名稱為的,名字就是我們自定義的。而這種加密方式是每次加密的結(jié)果都不同,所以表現(xiàn)為的值每次都發(fā)生了變化,而實(shí)際上并沒(méi)有改變。
在 Laravel 的配置文件 config/session.php 中可以設(shè)置 Session Cookie Name,比如這個(gè)項(xiàng)目中設(shè)置名稱為“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",
我們可以看到刷新頁(yè)面,查看 cookie,會(huì)發(fā)現(xiàn)一個(gè)名稱為 sns_session 的 cookie,名字就是我們自定義的。
這個(gè) sessionid 就是 cookie 和 session 聯(lián)系的橋梁,服務(wù)器通過(guò)這個(gè) sessionid 判斷來(lái)自哪個(gè)客戶端的請(qǐng)求。
Laravel 的 sessionid 每次發(fā)生變化但是,每次刷新頁(yè)面,這個(gè) cookie 值都會(huì)發(fā)生改變!那么這樣服務(wù)器如何保持會(huì)話呢?因?yàn)槟愕?sessionid 總是在變。
我們?cè)?vendor/laravel/framework/src/Illuminate/Session/Store.php 的 save 方法中調(diào)試一下,打印一下這里的調(diào)用棧:
/** * {@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)); }
每次刷新頁(yè)面,這個(gè) Store 對(duì)象的 id 屬性其實(shí)是沒(méi)有變化的,這個(gè)屬性就是 sessionid 這個(gè) cookie 的值。也就是說(shuō),sessionid 的值并不是每次發(fā)生變化,而是寫 cookie 的時(shí)候,值發(fā)生了變化。
Laravel 對(duì) cookie 進(jìn)行加密在 vendor/laravel/framework/src/Illuminate/Cookie/Middleware/EncryptCookies.php 中的 encrypt 方法找到了原因,這個(gè)中間件對(duì)所有 cookie 值進(jìn)行了加密處理,它被包含在 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; }
而這種加密方式是每次加密的結(jié)果都不同,所以表現(xiàn)為 sessionid 的值每次都發(fā)生了變化,而實(shí)際上并沒(méi)有改變。在需要用到這個(gè) cookie 的時(shí)候會(huì)被解密回去。
Laravel 框架這樣設(shè)計(jì)的目的可能是為了防止 session 劫持吧!考慮還是比較全面的!
其他補(bǔ)充知識(shí) 原生 PHP 設(shè)置 session 名稱session_name() 函數(shù):
"; ?>
session_name() 函數(shù)返回當(dāng)前會(huì)話名稱。 如果指定 name 參數(shù), session_name() 函數(shù)會(huì)更新會(huì)話名稱, 并返回 原來(lái)的 會(huì)話名稱。
請(qǐng)求開(kāi)始的時(shí)候,會(huì)話名稱會(huì)被重置并且存儲(chǔ)到 session.name 配置項(xiàng)。 因此,要想設(shè)置會(huì)話名稱,那么對(duì)于每個(gè)請(qǐng)求,都需要在 調(diào)用 session_start() 或者 session_register() 函數(shù)之前調(diào)用 session_name() 函數(shù)。
COOKIE和SESSION的區(qū)別和關(guān)系COOKIE保存在客戶端,而SESSION則保存在服務(wù)器端
從安全性來(lái)講,SESSION的安全性更高
從保存內(nèi)容的類型的角度來(lái)講,COOKIE只保存字符串(及能夠自動(dòng)轉(zhuǎn)換成字符串)
從保存內(nèi)容的大小來(lái)看,COOKIE保存的內(nèi)容是有限的,比較小,而SESSION基本上沒(méi)有這個(gè)限制
從性能的角度來(lái)講,用SESSION的話,對(duì)服務(wù)器的壓力會(huì)更大一些
SEEION依賴于COOKIE,但如果禁用COOKIE,也可以通過(guò)url傳遞
(本文為小談博客原創(chuàng),轉(zhuǎn)載請(qǐng)注明出處!原文地址:https://blog.tanteng.me/2017/...)
大家好,我的新課程《圖解HTTP精華解讀》開(kāi)始報(bào)名了
報(bào)名地址:https://segmentfault.com/l/15...
本次課程內(nèi)容是對(duì)《圖解HTTP》這本書的精華解讀,無(wú)論你是否讀過(guò)這本書,我們可以一起全面梳理一下關(guān)于 HTTP 的知識(shí)點(diǎn)。
課程目標(biāo)不僅是對(duì)這本書的知識(shí)總結(jié),同時(shí)也會(huì)結(jié)合工作和個(gè)人理解從不同角度講解 HTTP 的知識(shí),重點(diǎn)補(bǔ)充 websocket 的應(yīng)用以及 HTTP/2 的介紹
面向人群希望加深對(duì) HTTP 協(xié)議了解的人,或全面梳理復(fù)習(xí) HTTP 知識(shí)點(diǎn)的人
難度級(jí)別理解比較簡(jiǎn)單,但知識(shí)點(diǎn)很多,內(nèi)容很重要
主要內(nèi)容從輸入 URL 到頁(yè)面展示的過(guò)程發(fā)生了什么?
HTTP 協(xié)議基礎(chǔ)(無(wú)狀態(tài),持久連接,報(bào)文,狀態(tài)碼,Cookie等)
為什么使用 HTTPS?HTTP 的缺點(diǎn)和不足
WEB 安全防范(防注入,CSRF 攻擊及原理)
websocket 原理
簡(jiǎn)單演示 websocket 服務(wù)端搭建和客戶端交互過(guò)程
HTTP/2 介紹
讓我們一起開(kāi)啟 HTTP 之旅!
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/25807.html
摘要:服務(wù)器檢查該,以此來(lái)辨認(rèn)用戶狀態(tài)。五下的相關(guān)應(yīng)用應(yīng)用在中配置如下配置項(xiàng)用于設(shè)置存儲(chǔ)方式,默認(rèn)是,即存儲(chǔ)在文件中,該文件位于配置項(xiàng)配置的路徑,即。配置項(xiàng)用于設(shè)置有效期,默認(rèn)為分鐘。配置項(xiàng)用于配置數(shù)據(jù)是否加密。 一、cookie的由來(lái) ??當(dāng)用戶訪問(wèn)某網(wǎng)站時(shí),web服務(wù)器會(huì)將部分信息保存到本地計(jì)算機(jī)上,當(dāng)用戶再次關(guān)顧該網(wǎng)站時(shí),服務(wù)器會(huì)去查看用戶是否登錄過(guò)該網(wǎng)站,如果登錄過(guò),就會(huì)將這些記錄在...
摘要:實(shí)際上,本原則要求接口必須是粒度明確的。當(dāng)你的代碼不符合接口分離原則時(shí),那也肯定違背了單一責(zé)任原則。接口分離原則本原則是指在實(shí)現(xiàn)類中對(duì)于接口中的方法并不強(qiáng)制去實(shí)現(xiàn)使用不到的方法。 聲明:本文并非博主原創(chuàng),而是來(lái)自對(duì)《Laravel 4 From Apprentice to Artisan》閱讀的翻譯和理解,當(dāng)然也不是原汁原味的翻譯,能保證90%的原汁性,另外因?yàn)槭抢斫夥g,肯定會(huì)有錯(cuò)誤...
摘要:組件擴(kuò)展通常有兩種方法向容器中綁定自己的接口實(shí)現(xiàn)痛過(guò)使用工廠模式實(shí)現(xiàn)的類注冊(cè)自己的擴(kuò)展。類庫(kù)管理類以工廠模式實(shí)現(xiàn),負(fù)責(zé)諸如緩存等驅(qū)動(dòng)的實(shí)例化。閉包須要傳入繼承自和容器的實(shí)例化對(duì)象。當(dāng)完成擴(kuò)展之后要記住中替換成自己的擴(kuò)展名稱。 聲明:本文并非博主原創(chuàng),而是來(lái)自對(duì)《Laravel 4 From Apprentice to Artisan》閱讀的翻譯和理解,當(dāng)然也不是原汁原味的翻譯,能保證9...
摘要:我們?cè)谶@個(gè)類中的方法看到如下代碼,一個(gè)典型的過(guò)濾器,在這個(gè)中獲取的方法是。,整個(gè)初始化的過(guò)程總結(jié)下巧妙的使用了面向?qū)ο蟮慕涌诜绞剑瑸槲覀兲峁┝烁鞣N各樣不同的存儲(chǔ)方式,一旦我們了解了存儲(chǔ)方式和加密規(guī)則,讓不同的容器進(jìn)行共享的目的也可以達(dá)到 前些天,為了解答一個(gè)問(wèn)題,就去研究了Laravel的源碼,講講我的收獲:這個(gè)是問(wèn)題源:http://segmentfault.com/q/101000...
摘要:然后中間件使用方法來(lái)啟動(dòng)獲取實(shí)例,使用類來(lái)管理主要分為兩步獲取實(shí)例,主要步驟是通過(guò)該實(shí)例從存儲(chǔ)介質(zhì)中讀取該次請(qǐng)求所需要的數(shù)據(jù),主要步驟是。 說(shuō)明:本文主要通過(guò)學(xué)習(xí)Laravel的session源碼學(xué)習(xí)Laravel是如何設(shè)計(jì)session的,將自己的學(xué)習(xí)心得分享出來(lái),希望對(duì)別人有所幫助。Laravel在web middleware中定義了session中間件IlluminateSess...
閱讀 2326·2021-11-25 09:43
閱讀 3464·2021-10-25 09:48
閱讀 1333·2021-09-13 10:24
閱讀 2742·2019-08-29 15:07
閱讀 1283·2019-08-29 13:14
閱讀 3279·2019-08-29 12:22
閱讀 1363·2019-08-29 11:32
閱讀 3250·2019-08-29 11:23