最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Laravel中的Sessionid處理機(jī)制詳解

 更新時(shí)間:2017年09月12日 08:30:25   作者:小談  
這篇文章主要給大家介紹了關(guān)于Laravel中Sessionid處理機(jī)制的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧。

前言

本文主要給大家介紹了關(guān)于Laravel中Sessionid處理機(jī)制的相關(guān)內(nèi)容,分享出來(lái)供大家參考學(xué)習(xí),下面話不多說(shuō)了,來(lái)一起看看詳細(xì)的介紹吧。

在 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 總是在變。

Laravel 對(duì) cookie 進(jìn)行加密

我們?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ā)生變化,而是寫(xiě) cookie 的時(shí)候,值發(fā)生了變化。

在 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ù):

<?php
 
/* 設(shè)置會(huì)話名稱為 WebsiteID */
 
$previous_name = session_name("WebsiteID");
 
echo "The previous session name was $previous_name<br />";
?>

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)型的角度來(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傳遞

總結(jié)

以上就是這篇文章的全部?jī)?nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,如果有疑問(wèn)大家可以留言交流,謝謝大家對(duì)腳本之家的支持。

相關(guān)文章

最新評(píng)論

黄骅市| 涿鹿县| 六安市| 胶州市| 申扎县| 郴州市| 洛宁县| 同仁县| 宁远县| 长宁区| 房产| 达州市| 襄垣县| 云阳县| 饶阳县| 右玉县| 新安县| 依兰县| 曲沃县| 称多县| 桂林市| 建瓯市| 沁源县| 科尔| 柞水县| 临武县| 青浦区| 武安市| 怀集县| 通化市| 商丘市| 甘洛县| 句容市| 威信县| 曲周县| 麦盖提县| 洛宁县| 晋宁县| 潞城市| 南汇区| 黄大仙区|