Skip to content

Latest commit

 

History

History
127 lines (89 loc) · 3.98 KB

session.md

File metadata and controls

127 lines (89 loc) · 3.98 KB

session

  • session 服务提供类
protected function registerSessionManager()
    {
        $this->app->singleton('session', function ($app) {
            return new SessionManager($app);
        });
    }
    
$this->app->singleton('session.store', function ($app) {
            // First, we will create the session manager which is responsible for the
            // creation of the various session drivers when they are needed by the
            // application instance, and will resolve them on a lazy load basis.
            return $app->make('session')->driver();
        });

session

global session function

sessionManager类结构图
session session

实例化调用如下方法
session
session
session
session
session
session
session
session

Store/session结构图
session

get获取数据
session

  • startSession中间件
    handle
    handle

是否配置了session
session

startSession
session

getSession
session

startSession
session

  • startSession流程
    loadAttribute
    session
    session
    session

token
token token

在http请求时,框架会运行startSession中间件,根据session.php配置实现存储类型
如file,redis,database等实例化Store【Illuminate\Session\Store】并返回该对象
【store内置了Illuminate\Session\FileSessionHandler根据配置文件指定】 然后生成
sessionId,_token,同时将数据保存在Store【attributes成员数组下】

session/Store
token

  • request 实例设置Session
    token
    token

  • session gc 回收
    token token

  • response header cookie 设置
    token

  • sessionHanlder自定义

  • session FileHanlder保存用户设置的session

session()->put('key','value');
token
token
token
token

File驱动类型的session大体流程
每次http请求时,自动读取session file里的文件数据,并保存在session/store类下
当用户session->put()设置数据时,sessionStart中间件会将数据再写入文件保存

具体说明代码在startSession中间件这骚货
startSession

session补充 每次http请求时,根据sessionId【session文件】读取数据,并解析保存在Store里的attributes
并且生成_token=40位随机字符串,并把Store实例保存在当前请求Request里的session变量上

同时检测session生命周期,到期后自动删除session文件

在http请求结束时,自动将用户设置的数据【如session->put这样的操作】会将数据写入文件保存
方便下次再读取文件,同时将session名称,对应的sessionid等参数保存在Cookie
并设置响应头的cookie

cookie