1. 程式人生 > >laravel session

laravel session

保存 圖片 name onf storage 怎麽 src only min

眾所周知,每一個session都要經歷從啟用,存取,到最後的刪除這樣一個過程,在laravel中是如何處理session的呢?在laravel裏,沒有使用PHP內置的 session功能,而是自己開發了新的Session,並且通過中間件直接幫我們開啟了Session,那麽它是如何啟用的,又是怎麽處理生命周期的呢,並且都有哪些可以供我們使用的方法呢,一起探討一下.

laravel Session的啟用:

在laravel的核心類文件中(app/Http/Kernel.php)我們可以看到StartSession中間件在優先啟用的中間件中位列第一,
技術分享圖片

打開StartSession.php這個文件,在這裏,我們不僅可以看到具體的啟用session方法,還可以看到處理session生命周期的函數

 protected function getSessionLifetimeInSeconds()
    {
        //調用SessionManager.php文件中的getSessionConfig函數,獲取session配置文件中的‘lifetime‘參數,在這個參數裏設置了session的生命周期時間.
        return ($this->manager->getSessionConfig()[‘lifetime‘] ?? null) * 60;
    }

相關Session方法

在Illuminate\Session\Store.php目錄中,我們可以看到為Session量身定制的一些方法,這些方法,在實現Auth快速創建登錄和註冊功能時都有被用到,感興趣的話,可以打開該文件去查看

Session配置

Session 配置文件位於 config/session.php,

    ‘driver‘ => env(‘SESSION_DRIVER‘, ‘file‘),    //session驅動,默認為flie驅動
    ‘lifetime‘ => env(‘SESSION_LIFETIME‘, 120),      //生命周期,默認為120分鐘
    ‘expire_on_close‘ => false,    //關閉瀏覽器是否自動刪除session
    ‘encrypt‘ => false,    //存儲的session數據是否需要加密
    ‘files‘ => storage_path(‘framework/sessions‘),    //file驅動保存路徑,默認為storage/framework/sessions/下
    ‘connection‘ => env(‘SESSION_CONNECTION‘, null),    //如果使用數據庫驅動或者redis驅動時,連庫管理session
    ‘table‘ => ‘sessions‘,     //使用數據庫驅動時,創建的session表名 
    ‘store‘ => env(‘SESSION_STORE‘, null),    //使用apc 或者memcached驅動的配置
    ‘lottery‘ => [2, 100],    //清除舊session
    ‘cookie‘ => env(    //cookie名稱
        ‘SESSION_COOKIE‘,
        Str::slug(env(‘APP_NAME‘, ‘laravel‘), ‘_‘).‘_session‘
    ),    
    ‘path‘ => ‘/‘,    //cookie
    ‘domain‘ => env(‘SESSION_DOMAIN‘, null),
    ‘secure‘ => env(‘SESSION_SECURE_COOKIE‘, false),
    ‘http_only‘ => true,    //將此值設置為true將阻止JavaScript訪問cookie的值
    ‘same_site‘ => null,

通過這裏我們可以看到在.env環境中有與session對應的相關參數,如果需要,可以自由定義

修改配置的方法

  • 手動修改config目錄下的session文件
  • 使用config()函數,例如
config(‘session.lifetime‘);//直接獲取session文件中‘lifetime‘這個參數
config([‘session.lifetime‘=>‘20‘]);//則是直接修改

laravel session