以下由Laravel教學專欄為大家介紹laravel中session的過期時間,希望對需要的朋友有幫助!
在專案開發的過程中,前後端分離需要用session保存使用者的登陸資訊
這就涉及到session的有效期了
session又分為php中的session有效期和laravel中的session的有效期
他們預設的有效期是
在php.ini中查看session.gc_maxlifetime
預設是1440秒差不多是24分
而laravel的session有效期限是在config/session.php中
'lifetime' => 120, 'expire_on_close' => false,
如果'expire_on_close'設定為false的話,'lifetime'有效,如果'expire_on_close'設定為true的話,'lifetime'無效
關於laravel的session的具體使用
學習源頭:https://www.chenyudong .com/archives/laravel-session-use.html
官方文件地址:http://laravelacademy.org/post/7954.html
用Laravel開發應用,把原有的程式碼copy過來,以前的程式碼session使用了$_SESSION
,本以為移植過來可以很好的運行的,因為沒有依賴其他的元件,結果出現了這個
Undefined variable: _SESSION
Laravel的session的設定檔配置在app/config/session.php
中,使用時可以看看session 設定檔中可用的選項設定及註解。
Laravel 預設使用 file
的方式來實作 session的。她並沒有用php原生的$_SESSION(php原生的session要看php.ini的位置),所以忽略php相關的session函數,例如session_start()
, $_SESSION
。 Laravel在運作過程中會在app/storage/session/
目錄寫入session的信息,所以這個目錄需要有寫權限,否者session就無法寫入成功。
Laravel除了使用預設的file作為session的實現,還支援cookie
, Memcached
, Redis
和資料庫
的後端驅動作為session的實作。必要的時候還需要自己實現一個session的實現方式,例如在微信公眾帳號和用戶的交互,這中session就無法直接使用,因為每次都是微信伺服器來請求,無法透過請求的來源來辨別用戶。
laravel的session簡單API
Session的API還是比較簡單的,大家看看中文文件大概也知道怎麼個意思。但是有那麼幾個還不太好理解。
//session的永久保存(在不过期范围内) Session::put('key', 'value'); //等同于PHP的原生session $_SESSION['key'] = 'value'; //get操作 $value = Session::get('key', 'default'); //去除操作并删除,类似pop概念 $value = Session::pull('key', 'default'); //检测是否存在key Session::has('users'); //删除key Session::forget('key');
這個對應只要session不過時,基本上就是永久保存,下次http請求也是存在的。不同於下面的flash概念。
laravel的session中flash概念
但是Laravel出了個快閃flash
的概念,把我一下子給搞混了。這個flash兩次請求都有效(本次和下次請求有效),與本次請求取操作多少次無關。
//保存key,value Session::flash('key', 'value'); //取值方法还是一样的 Session::get('key'); //刷新快闪数据时间,保持到下次请求 Session::keep(array('username', 'email'));
這個flash
的概念和上面的put
的概念不太一樣。
- put :這個對應只要session不過期,基本上就是永久保存,下次請求也是存在的。
- flash :已儲存的值,本次請求可以使用,下次http請求可以使用,再下次就不存在了。
也就是說下一次的請求用完就被銷毀了,不會讓session的值變的越來越大,可以保存一些暫時的資料。
這中情況的使用場景例如有:
- 使用者請求了頁面,出現錯誤訊息,重定向到一個新的頁面,需要展示先前的資料。 (雖然可以透過url參數來傳遞,處理不好可能會有xss漏洞)。
- 使用者造訪了一個頁面,過濾器發現沒權限,儲存目前頁面url,重定向到登入頁面,登入成功,取出值,重定向到原先的頁面。 (這裡可能需要刷新已儲存的快閃資料)
session落地的時間
我天真的以為使用了Session::put
函數就能保存這個變數了。於是我的程式碼這樣寫:
class LoginController { public function login(){ Session::put('key','value'); print_r( Session::all() ); //取出来看看是否put成功 exit; //习惯性的调试都exit,不执行后续代码 //return Redirect::to(/); 框架在return后还会有后续的代码执行的 } }
結果下次請求就是找不到本次的Session,而且看app/storage/session
目錄就是沒有檔案產生。總覺得不對勁啊。
後來看到網路上有個方法Session::save()
,於是我也用了下,居然發現成功的生成了session的檔案。於是我感覺到,Laravel不用php原生的session,那麼在controller之後應該做了一些事情,將session寫入到文件中,而不是每次put
操作都寫操作,這樣會IO操作太頻繁的,影響性能的。
查看呼叫相關的程式碼。 laravel編譯後,在bootstrap/compiled.php
中
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); // 调用controller的method if ($this->sessionConfigured()) { $this->closeSession($session); //关闭session $this->addCookieToResponse($response, $session); } return $response; } ... protected function closeSession(SessionInterface $session) { $session->save(); // 保存session $this->collectGarbage($session); } }
小提示:如果不知道函数调用情况,可以在controller中throw new Exception();
,然后在/config/app.php
的debug更改为debug=>true
。可以看到函数的调用关系。
可以看见,在调用完controller之后,调用了session->save()
的方法,来主动的保存session。这样session才能落地保存起来,如果在controller或者view里面写了exit;
,那么session是不会被保存的,除非主动的写Session::save()
才能手工的保存起来。因此在debug调试的时候千万要注意啊。
以上是關於laravel中session的過期時間詳解的詳細內容。更多資訊請關注PHP中文網其他相關文章!

Tocombatisolationandlonelinessinremotework,companiesshouldimplementregular,meaningfulinteractions,provideequalgrowthopportunities,andusetechnologyeffectively.1)Fostergenuineconnectionsthroughvirtualcoffeebreaksandpersonalsharing.2)Ensureremoteworkers

laravelispularfullull-stackDevelopmentBecapeitOffersAsAseAseAseAseBlendOfbackendEdpoperandPowerandForterFlexibility.1)ITSbackEndCapaPabilities,sightifyDatabaseInteractions.2)thebladeTemplatingEngingEngineAllolowsLows

選擇視頻會議平台的關鍵因素包括用戶界面、安全性和功能。 1)用戶界面應直觀,如Zoom。 2)安全性需重視,MicrosoftTeams提供端到端加密。 3)功能需匹配需求,GoogleMeet適合簡短會議,CiscoWebex提供高級協作工具。

最新版本的Laravel10與MySQL5.7及以上、PostgreSQL9.6及以上、SQLite3.8.8及以上、SQLServer2017及以上兼容。這些版本選擇是因為它們支持Laravel的ORM功能,如MySQL5.7的JSON數據類型,提升了查詢和存儲效率。

Laravelisanexcellentchoiceforfull-stackdevelopmentduetoitsrobustfeaturesandeaseofuse.1)ItsimplifiescomplextaskswithitsmodernPHPsyntaxandtoolslikeBladeforfront-endandEloquentORMforback-end.2)Laravel'secosystem,includingLaravelMixandArtisan,enhancespro

Laravel10,releasedonFebruary7,2023,isthelatestversion.Itfeatures:1)Improvederrorhandlingwithanewreportmethodintheexceptionhandler,2)EnhancedsupportforPHP8.1featureslikeenums,and3)AnewLaravel\Promptspackageforinteractivecommand-lineprompts.

thelatestlaravelververversionenhancesdevelopmentwith:1)簡化的inimpliticmodelbinding,2)增強EnhancedeloquentcapabibilitionswithNewqueryMethods和3)改善了supportorfortormodernphpfortornphpforternphpfeatureserslikenamedargenamedArgonedArgonsemandArgoctess,makecodingMoreftermeforefterMealiteFficeAndEnjoyaigaigaigaigaigaiganigaborabilyaboipaigyAndenjoyaigobyabory。

你可以在laravel.com/docs找到最新Laravel版本的發布說明。 1)發布說明提供了新功能、錯誤修復和改進的詳細信息。 2)它們包含示例和解釋,幫助理解新功能的應用。 3)注意新功能的潛在復雜性和向後兼容性問題。 4)定期審查發布說明可以保持更新並激發創新。


熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

SAP NetWeaver Server Adapter for Eclipse
將Eclipse與SAP NetWeaver應用伺服器整合。

DVWA
Damn Vulnerable Web App (DVWA) 是一個PHP/MySQL的Web應用程序,非常容易受到攻擊。它的主要目標是成為安全專業人員在合法環境中測試自己的技能和工具的輔助工具,幫助Web開發人員更好地理解保護網路應用程式的過程,並幫助教師/學生在課堂環境中教授/學習Web應用程式安全性。 DVWA的目標是透過簡單直接的介面練習一些最常見的Web漏洞,難度各不相同。請注意,該軟體中

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

記事本++7.3.1
好用且免費的程式碼編輯器

VSCode Windows 64位元 下載
微軟推出的免費、功能強大的一款IDE編輯器