gmnon.cn-疯狂蹂躏欧美一区二区精品,欧美精品久久久久a,高清在线视频日韩欧美,日韩免费av一区二区

站長資訊網(wǎng)
最全最豐富的資訊網(wǎng)站

session與cookie的機(jī)制及l(fā)aravel框架下的相關(guān)應(yīng)用

session與cookie的機(jī)制及l(fā)aravel框架下的相關(guān)應(yīng)用

一、cookie的由來

當(dāng)用戶訪問某網(wǎng)站時,web服務(wù)器會將部分信息保存到本地計(jì)算機(jī)上,當(dāng)用戶再次關(guān)顧該網(wǎng)站時,服務(wù)器會去查看用戶是否登錄過該網(wǎng)站,如果登錄過,就會將這些記錄在本地的信息發(fā)送到網(wǎng)頁上展示出來,這就是cookie存在的意義。

那么服務(wù)器如何識別用戶呢?眾所周知,http協(xié)議是無狀態(tài)連接,所謂無狀態(tài)連接是指瀏覽器每次向服務(wù)器發(fā)起請求的時候,不是通過一個連接,而是每次都建立一個新的連接。如果是一個連接的話,服務(wù)器進(jìn)程中就能保持住這個連接并且在內(nèi)存中記住一些信息狀態(tài)。而每次請求結(jié)束后,連接就關(guān)閉,相關(guān)的內(nèi)容就釋放了,所以記不住任何狀態(tài),成為無狀態(tài)連接?;趆ttp協(xié)議的服務(wù)器,針對于不同的連接,服務(wù)器無法識別這些連接都出自同一個用戶只手,于是cookie應(yīng)運(yùn)而生。

當(dāng)?shù)谝淮卧L問服務(wù)器時,http報(bào)文中是沒有cookie的,這時服務(wù)器在響應(yīng)(response)下行HTTP報(bào)文中,命令瀏覽器攜帶cookie信息;瀏覽器再訪問同一個域的時候,將把cookie信息攜帶到請求(request)上行HTTP請求中,從而實(shí)現(xiàn)了HTTP模擬有了狀態(tài)。

總結(jié)一下,cookie實(shí)際上是一小段的文本信息??蛻舳苏埱蠓?wù)器,如果服務(wù)器需要記錄該用戶狀態(tài),就使用response向客戶端瀏覽器頒發(fā)一個Cookie??蛻舳藭袰ookie保存起來。當(dāng)瀏覽器再請求該網(wǎng)站時,瀏覽器把請求的網(wǎng)址連同該Cookie一同提交給服務(wù)器。服務(wù)器檢查該Cookie,以此來辨認(rèn)用戶狀態(tài)。服務(wù)器還可以根據(jù)需要修改Cookie的內(nèi)容。

二、cookie的內(nèi)容及特點(diǎn)

cookie主要內(nèi)容:名字、值、域、路徑和過期時間Name和Value屬性由程序設(shè)定,默認(rèn)值都是空引用Domain屬性的默認(rèn)值為當(dāng)前URL的域名部分,不管發(fā)出這個cookie的頁面在哪個目錄下的Path屬性的默認(rèn)值是根目錄,即 ”/” ,不管發(fā)出這個cookie的頁面在哪個目錄下的??梢杂沙绦蛟O(shè)置為一定的路徑來進(jìn)一步限制此cookie的作用范圍Expires屬性,這個屬性設(shè)置此Cookie 的過期日期和時間

當(dāng)Expires屬性未設(shè)置時,瀏覽器網(wǎng)頁關(guān)閉后,cookie自動消失,稱之為會話cookie,會話cookie存在于內(nèi)存中,而非本地的硬盤里;若設(shè)置了過期時間,瀏覽器就會把cookie保存到硬盤上,關(guān)閉后再次打開瀏覽器,這些cookie仍然有效直到超過設(shè)定的過期時間。存儲在硬盤上的cookie可以在瀏覽器的不同進(jìn)程間共享。

cookie特點(diǎn):

1.cookie不加密,可以隨意篡改,因此很不安全

2.不同域之間不能共享cookiecookie大小受到限制,如下圖所示

session與cookie的機(jī)制及l(fā)aravel框架下的相關(guān)應(yīng)用

三、session的出世

為了彌補(bǔ)cookie不安全性這一致命缺點(diǎn),session的機(jī)制產(chǎn)生了,session是另一種記錄客戶狀態(tài)的機(jī)制,不同的是cookie保存在客戶端瀏覽器中,而session保存在服務(wù)器上??蛻舳藶g覽器訪問服務(wù)器的時候,服務(wù)器把客戶端信息以某種形式記錄在服務(wù)器上,這就是session。

當(dāng)用戶連接服務(wù)器時,服務(wù)器都會建立一個session,服務(wù)器通過session_id來識別是哪個用戶訪問。當(dāng)用戶建立一次會話(session)時,可以在用戶授權(quán)成功時給他一個唯一的cookie,當(dāng)一個用戶提交了表單時,瀏覽器會將用戶的SessionId自動附加在HTTP頭信息中,當(dāng)服務(wù)器處理完這個表單后,將結(jié)果返回給SessionId所對應(yīng)的用戶。

總結(jié)一下,session是經(jīng)過加密的,比cookie更安全,session的創(chuàng)建流程如下:當(dāng)為客戶端請求創(chuàng)建session時,服務(wù)器首先檢查請求中是否含有session_id,如果有,則服務(wù)器會在將session_id檢索出來,如果服務(wù)器沒有存儲session_id,則創(chuàng)建一個session_id;如果沒有,則為此客戶端創(chuàng)建一個session并且生成一個與此session相關(guān)聯(lián)的sessionId,sessionId的值是一個既不會重復(fù),又不容易被找到規(guī)律以仿造的字符串,這個sessionId將被在本次響應(yīng)中返回給客戶端保存。

四、cookie與session的異同

很多人說cookie和session就是一回事兒,區(qū)別在于用戶是否可見。我也比較認(rèn)同此觀點(diǎn),作為session的載體,cookie保存于本地瀏覽器中,易操作,易存儲,可有效的提高服務(wù)器性能(不占內(nèi)存),但cookie有明文不安全,大小受限制等缺點(diǎn); session保存于服務(wù)器緩存中,加密,session_id大小不受限制,但影響服務(wù)器性能。

說到cookie和session的聯(lián)系,就不得不提到禁用cookie了,在客戶端瀏覽器設(shè)置里,用戶是可以禁用cookie的,因?yàn)閏ookie是session_id的載體,所以一旦cookie被禁用,那么session也就無法使用。但是有兩種方法可以解決依賴問題,其一是URL重寫,簡單的說就是在url地址中加入session_id參數(shù),其二是表單隱藏字段,服務(wù)器會自動修改表單,添加一個隱藏字段,以便在表單提交時能夠把session_id傳遞回服務(wù)器,如下所示:

session與cookie的機(jī)制及l(fā)aravel框架下的相關(guān)應(yīng)用

另一個聯(lián)系是session共享,對于多網(wǎng)站(同一父域不同子域)單服務(wù)器,我們需要解決的就是來自不同網(wǎng)站之間session_id的共享。由于域名不同(aaa.test.com和bbb.test.com),而session_id又分別儲存在各自的cookie中,因此服務(wù)器會認(rèn)為對于兩個子站的訪問,是來自不同的會話。解決的方法是通過修改cookies的域名為父域名達(dá)到cookie共享的目的,從而實(shí)現(xiàn)session_id的共享。帶來的弊端就是,子站間的cookie信息也同時被共享了。

五、laravel下的相關(guān)應(yīng)用

session應(yīng)用

在config/session.php中配置如下:

   'driver' => env('SESSION_DRIVER', 'file'),     'lifetime' => 120,     'expire_on_close' => false,     'encrypt' => false,     'files' => storage_path('framework/sessions'),     'connection' => null,     'table' => 'sessions',     'lottery' => [2, 100],     'cookie' => 'laravel_session',     'path' => '/',     'domain' => null,     'secure' => false,

driver配置項(xiàng)用于設(shè)置Session存儲方式,默認(rèn)是file,即存儲在文件中,該文件位于files配置項(xiàng)配置的路徑,即storage/framework/sessions。此外Laravel還支持其它存儲方式:

database:將Session數(shù)據(jù)存放到指定數(shù)據(jù)表中,該數(shù)據(jù)表由配置項(xiàng)table設(shè)置memcached:將Session數(shù)據(jù)存放到Memcached中redis:將Session數(shù)據(jù)存放到Redis中array:將Session數(shù)據(jù)存放到數(shù)組中,該配置僅用于測試環(huán)境要修改driver配置,需要去項(xiàng)目根目錄下.env文件修改其中的SESSION_DRIVER選項(xiàng)。

lifetime配置項(xiàng)用于設(shè)置Session有效期,默認(rèn)為120分鐘。expire_on_close配置項(xiàng)用于設(shè)置是否在瀏覽器關(guān)閉時立即讓Session失效。encrypt配置項(xiàng)用于配置Session數(shù)據(jù)是否加密。lottery配置項(xiàng)用于配置回收Session存放位置。cookie配置項(xiàng)用于配置存放Session ID的Cookie名稱,默認(rèn)是laravel_session。path配置項(xiàng)用于配置存放Session ID的Cookie存放路徑,默認(rèn)為項(xiàng)目根目錄。domain配置項(xiàng)用于配置存放Session ID的Cookie存放域名。secure配置項(xiàng)用于配置是否只有在HTTPS協(xié)議下發(fā)送Session ID到服務(wù)器。

使用session函數(shù)

session(['site.xxx'=>'LaravelAcademy.org']);$site = session('site');dd($site);

使用request請求

我們可以以這種方式獲取所有Session數(shù)據(jù):

$sessions = $request->session()->all();

我們可以像這樣存取Session數(shù)據(jù):

$request->session()->put('site', 'https://www.php.cn/');if($request->session()->has('site')){     $site = $request->session()->get('site');     dd($site);}

此外還可以這樣獲取Session數(shù)據(jù)(如果對應(yīng)Session不存在,返回默認(rèn)值):

$sitename = $request->session()->get('sitename','Laravel');dd($sitename);

此外還可以使用push方法推送多個數(shù)據(jù)到Session數(shù)組:

$request->session()->push('site.xxx', 'https://www.php.cn/');$request->session()->push('site.xxx', 'Laravel');if($request->session()->has('site')){     $site = $request->session()->get('site');     dd($site);}使用pull方法,獲取數(shù)據(jù)后刪除使用flush方法,一次性刪除所有session數(shù)據(jù)使用forget方法,刪除某個session數(shù)據(jù)

一次性session

如果想保證一次性Session數(shù)據(jù)有效,可以定義TestController@sessionx代碼如下:

public function sessionx(Request $request){     $request->session()->reflash();     $message = session('message');     echo $message;}

這樣不管怎么刷新Session數(shù)據(jù)始終有效。此外還可以指定哪些Session數(shù)據(jù)有效:

$request->session()->keep(['message']);

大家也可以自行編譯laravel代碼:

class Middleware implements HttpKernelInterface{     ...     public function handle(Request $request, $type = HttpKernelInterface::MASTER_REQUEST, $catch = true)     {         $this->checkRequestForArraySessions($request);         if ($this->sessionConfigured()) {             $session = $this->startSession($request); // 啟動session             $request->setSession($session);         }         $response = $this->app->handle($request, $type, $catch); // 調(diào)用controller的method         if ($this->sessionConfigured()) {             $this->closeSession($session);         //關(guān)閉session             $this->addCookieToResponse($response, $session);         }         return $response;     }     ...       protected function closeSession(SessionInterface $session)     {         $session->save();    // 保存session         $this->collectGarbage($session);     } }

cookie應(yīng)用

添加Cookie

例如,我們需要在控制器中設(shè)置一個"Hello, Laravel"的cookie值,并設(shè)置有效期為10分鐘。這里推薦使用cookie的隊(duì)列方法Cookie::queue(),因?yàn)檫@樣Cookie會自動添加到響應(yīng):

<?php namespace AppHttpControllers; use Cookie; use AppHttpControllersController;  class DashboardController extends Controller{     public function index()     {         Cookie::queue('younger', 'Hello, dayang', 30);         return view('welcome');     }  }

獲取Cookie

Cookie的使用離不開Response和Request。獲取Cookie的值有兩個層面,一個是服務(wù)端,另一個是客戶端。如果要服務(wù)端獲取到Cookie的值,就需要從Request中獲得:

public function index(Request $request) {     $cookie = $request->cookie('younger');     dump($cookie); }

如果想獲得所有Cookie的值,可以使用不傳參數(shù)的方法:

public function index(Request $request){     $cookies = $request->cookie();     dump($cookies); }

清除Cookie

清除Cookie的方法比較簡單,原理和設(shè)置Cookie一樣的,只是將過期時間設(shè)置成了過去。這里也需要將Cookie加入到HTTP的Response中,使用make()或者forget()方法均可:

方式一:

Cookie::queue(Cookie::forget('younger'));或 setcookie('younger', '', -1, '/');

方式二:

$cookie = Cookie::forget('younger');//return Redirect::route('index')->withCookie($cookie);

贊(0)
分享到: 更多 (0)
?
網(wǎng)站地圖   滬ICP備18035694號-2    滬公網(wǎng)安備31011702889846號
gmnon.cn-疯狂蹂躏欧美一区二区精品,欧美精品久久久久a,高清在线视频日韩欧美,日韩免费av一区二区
奇米视频888| 色播五月激情五月| 国产午夜伦鲁鲁| japanese在线播放| 国产永久免费网站| 三上悠亚av一区二区三区| 99爱视频在线| 欧美黄色免费影院| 欧美精品久久久久久久久久久| 一道本在线免费视频| 日本 片 成人 在线| 日日噜噜夜夜狠狠| 天天操天天干天天做| 午夜视频在线网站| 国产树林野战在线播放| 国产高清不卡无码视频| 成人性生活视频免费看| 狠狠97人人婷婷五月| 国产精品沙发午睡系列| 人妻有码中文字幕| 福利片一区二区三区| 黄色一级片免费播放| 欧美这里只有精品| www.99热这里只有精品| 日本成人中文字幕在线| 超碰在线免费av| 成年女人18级毛片毛片免费| 性一交一乱一伧国产女士spa| 黄色免费视频大全| 亚洲第一天堂久久| 国产在线播放观看| 一级黄色香蕉视频| 无码人妻aⅴ一区二区三区日本| h无码动漫在线观看| 亚洲免费看av| 老子影院午夜伦不卡大全| 男人舔女人下面高潮视频| 奇米777在线视频| 波多野结衣综合网| 在线观看免费视频污| 蜜臀av色欲a片无码精品一区| 在线视频日韩一区 | 成年人深夜视频| 黄色一级一级片| 五月天激情图片| 一区二区三区网址| 怡红院av亚洲一区二区三区h| 国产永久免费网站| 中文字幕在线观看第三页| 国产乱人伦精品一区二区三区| 欧美黄色性生活| 欧美精品一区免费| 警花观音坐莲激情销魂小说| 一区二区三区 日韩| 日韩精品一区二区三区久久| www.亚洲成人网| 桥本有菜av在线| 日韩av片专区| 国产色视频在线播放| 狠狠爱免费视频| 极品美女扒开粉嫩小泬| 欧美又粗又长又爽做受| 日日噜噜夜夜狠狠久久丁香五月| 日本中文字幕影院| 欧美日韩亚洲自拍| 大香煮伊手机一区| 日韩一级片播放| 国产91色在线观看| 欧美精品性生活| 福利片一区二区三区| 亚洲美女爱爱视频| 手机av在线网站| 欧美 日韩 国产 在线观看| 中文字幕精品一区二区三区在线| 美女一区二区三区视频| 国内国产精品天干天干| 婷婷中文字幕在线观看| 黄瓜视频免费观看在线观看www| 异国色恋浪漫潭| 久久香蕉视频网站| www.99热这里只有精品| 无码人妻丰满熟妇区五十路百度| 色欲av无码一区二区人妻| 国产天堂在线播放| 色一情一区二区三区| 国产精品一区在线免费观看| 丁香六月激情婷婷| 免费av网址在线| 免费成年人高清视频| 成人免费网站入口| 国产男女激情视频| 中文字幕日韩久久| 大伊香蕉精品视频在线| 欧美亚洲日本在线观看| 99久久久无码国产精品性色戒| 男人添女荫道口女人有什么感觉| 激情伊人五月天| 国产九九热视频| 国产成人永久免费视频| 日本999视频| 男人添女人下部视频免费| 激情网站五月天| 精品视频在线观看一区二区| 久久久久狠狠高潮亚洲精品| 国产精品av免费| caopor在线视频| 中文字幕色呦呦| 粉色视频免费看| 亚洲爆乳无码专区| 妞干网视频在线观看| 一区二区xxx| 看av免费毛片手机播放| 青青草综合在线| 99日在线视频| 日本熟妇人妻xxxxx| 国产精品啪啪啪视频| 亚洲综合av在线播放| 国产真实乱子伦| 欧美日韩精品在线一区二区| 裸体裸乳免费看| 手机免费看av网站| 国产精品入口免费软件| 毛片在线播放视频| 99er在线视频| 久久综合在线观看| 亚洲综合激情视频| 日本男人操女人| 色诱视频在线观看| 成人一级片网站| 精品久久一二三| 可以在线看的av网站| 黄色一级片国产| 亚洲色成人www永久在线观看| 99久久久无码国产精品性色戒| 亚洲a级黄色片| 亚洲一区二区福利视频| 亚洲精品免费一区亚洲精品免费精品一区| 久久久999免费视频| 日韩精品―中文字幕| 美女日批免费视频| 日韩视频第二页| chinese少妇国语对白| 国产91色在线观看| 91小视频在线播放| 99亚洲精品视频| 精品免费久久久久久久| 欧美国产视频一区| 国产午夜伦鲁鲁| 中文字幕国内自拍| japanese在线视频| 欧美人成在线观看| 日韩视频在线免费看| 日本肉体xxxx裸体xxx免费| 中文字幕55页| 久草免费福利在线| 69堂免费视频| 制服丝袜中文字幕第一页| 国产在线无码精品| 尤物av无码色av无码| 一区二区成人网| 久久亚洲a v| 国产黄色特级片| 久久免费视频2| 人妻精品无码一区二区三区| 午夜精品免费看| 国产精品无码人妻一区二区在线 | 亚洲综合婷婷久久| 9191国产视频| 最新中文字幕免费视频| 中国丰满熟妇xxxx性| 成人黄色av片| 91性高潮久久久久久久| 日韩免费一级视频| 欧美 日韩 国产 在线观看| 欧美成人xxxxx| 乱熟女高潮一区二区在线| 日av中文字幕| 亚洲精品久久久久久久蜜桃臀| 免费涩涩18网站入口| 欧美一级视频免费看| 三区视频在线观看| 看欧美ab黄色大片视频免费 | 亚洲日本黄色片| 成人在线观看a| 老子影院午夜伦不卡大全| jizz18女人| 久久精品一区二| av免费播放网址| 久久6免费视频| av片中文字幕| 青青草综合视频| 女女百合国产免费网站| 黄色a级三级三级三级| 青青青国产在线视频| aa免费在线观看| 老太脱裤子让老头玩xxxxx| www.男人天堂网| 国产亚洲黄色片| 一级做a爱视频| 久久久久久久久久久久久久久国产|