真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

laravel中session的過期時間是什么

小編給大家分享一下laravel中session的過期時間是什么,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!

創(chuàng)新互聯(lián)主要從事成都網(wǎng)站制作、網(wǎng)站設(shè)計、外貿(mào)網(wǎng)站建設(shè)、網(wǎng)頁設(shè)計、企業(yè)做網(wǎng)站、公司建網(wǎng)站等業(yè)務(wù)。立足成都服務(wù)寧陜,10多年網(wǎng)站建設(shè)經(jīng)驗,價格優(yōu)惠、服務(wù)專業(yè),歡迎來電咨詢建站服務(wù):13518219792

在項目開發(fā)的過程中,前后端分離 需要用session保存用戶的登陸信息

這就涉及到session的有效期了

session又分為php中的session有效期和laravel中的session的有效期

他們默認(rèn)的有效期是

在php.ini中查看 session.gc_maxlifetime

laravel中session的過期時間是什么

默認(rèn)是1440秒 差不多是24分

而laravel的session有效期是在 config/session.php中

'lifetime' => 120,

'expire_on_close' => false,

如果'expire_on_close'設(shè)置為false的話,'lifetime'有效,如果'expire_on_close'設(shè)置為true的話,'lifetime'無效

關(guān)于laravel的session的具體使用

學(xué)習(xí)源頭:https://www.chenyudong.com/archives/laravel-session-use.html

官方文檔地址:http://laravelacademy.org/post/7954.html

用Laravel開發(fā)應(yīng)用,把原有的代碼copy過來,以前的代碼session使用了$_SESSION,本以為移植過來可以很好的運行的,因為沒有依賴其他的組件,結(jié)果出現(xiàn)了這個

Undefined variable: _SESSION

Laravel的session的配置文件配置在 app/config/session.php 中,使用時可以看看 session 配置文件中可用的選項設(shè)定及注釋。

Laravel 默認(rèn)使用 file 的方式來實現(xiàn) session的。她并不用php原生的$_SESSION(php原生的session要看php.ini的位置),所以忽略php相關(guān)的session函數(shù),例如session_start(), $_SESSION。Laravel在運行過程中會在app/storage/session/目錄寫入session的信息,所以這個目錄需要有寫權(quán)限,否者session就無法寫入成功。

Laravel除了使用默認(rèn)的file作為session的實現(xiàn),還支持cookie, Memcached, redis數(shù)據(jù)庫的后端驅(qū)動作為session的實現(xiàn)。必要的時候還需要自己實現(xiàn)一個session的實現(xiàn)方式,比如在微信公眾賬號和用戶的交互,這中session就無法直接使用,因為每次都是微信服務(wù)器來請求,無法通過請求的來源來辨別用戶。

laravel的session簡要API

Session的API還是比較簡單的,大家看看中文文檔也大概知道是怎么個意思。但是有那么幾個還不太好理解。

//session的永久保存(在不過期范圍內(nèi))
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');

這個對應(yīng)只要session不過期,基本上是永久保存,下次http請求也是存在的。不同于下面的flash概念。

laravel的session中flash概念

但是Laravel出了個快閃flash的概念,把我一下子給搞混了。這個flash兩次請求有效(本次和下次請求有效),與本次請求取操作多少次無關(guān)。

//保存key,value
Session::flash('key', 'value');

//取值方法還是一樣的
Session::get('key');

//刷新快閃數(shù)據(jù)時間,保持到下次請求
Session::keep(array('username', 'email'));

這個flash的概念和上面的put的概念不太一樣。

  • put :這個對應(yīng)只要session不過期,基本上是永久保存,下次請求也是存在的。

  • flash :保存的值,本次請求可以使用,下次http請求可以使用,再下一次就不存在了。

也就是說下一次的請求用完就被銷毀了,不會讓session的值變的越來越大,可以保存一些臨時的數(shù)據(jù)。

這中情況的使用場景比如有:

  • 用戶請求了頁面,出現(xiàn)錯誤信息,重定向到一個新的頁面,需要展示之前的數(shù)據(jù)。(雖然可以通過url參數(shù)來傳遞,處理不好可能會有xss漏洞)。

  • 用戶訪問了一個頁面,過濾器發(fā)現(xiàn)沒權(quán)限,保存當(dāng)前頁面url,重定向到登錄頁面,登錄成功,取出值,重定向到原先的頁面。(這里可能需要刷新保存的快閃數(shù)據(jù))

session落地的時間

我天真的以為使用了Session::put函數(shù)就能保存這個變量了。于是我的代碼這樣寫:

class LoginController {

    public function login(){
        Session::put('key','value'); 
        print_r( Session::all() ); //取出來看看是否put成功
        exit;   //習(xí)慣性的調(diào)試都exit,不執(zhí)行后續(xù)代碼
        //return Redirect::to(/); 框架在return后還會有后續(xù)的代碼執(zhí)行的
    }
}

結(jié)果下次請求就是找不到本次的Session,而且看app/storage/session目錄就是沒有文件生成??偢杏X不對勁啊。

后來看到網(wǎng)絡(luò)上有個方法Session::save(),于是我也用了下,居然發(fā)現(xiàn)成功的生成了session的文件。于是我感覺到,Laravel不用php原生的session,那么在controller之后應(yīng)該做了一些事情,將session寫入到文件中,而不是每次put操作都寫操作,這樣會IO操作太頻繁的,影響性能的。

查看調(diào)用相關(guān)的代碼。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); // 調(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);
    }
}
小提示:如果不知道函數(shù)調(diào)用情況,可以在controller中throw new Exception();,然后在/config/app.php的debug更改為debug=>true??梢钥吹胶瘮?shù)的調(diào)用關(guān)系。

可以看見,在調(diào)用完controller之后,調(diào)用了session->save()的方法,來主動的保存session。這樣session才能落地保存起來,如果在controller或者view里面寫了exit;,那么session是不會被保存的,除非主動的寫Session::save()才能手工的保存起來。因此在debug調(diào)試的時候千萬要注意啊。

以上是“l(fā)aravel中session的過期時間是什么”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內(nèi)容對大家有所幫助,如果還想學(xué)習(xí)更多知識,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道!


網(wǎng)站標(biāo)題:laravel中session的過期時間是什么
地址分享:http://weahome.cn/article/jcjjsj.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部