swoole之session的實現

把這裏改寫一下

$http->on('request', new \Core\SessionMiddleware(function($request, $response){
   
}));

SessionMiddleware.php

<?php
namespace Core;
use \Swoole\Http\Request;
use \Swoole\Http\Response;

class SessionMiddleware
{

    private $f;

    public function __construct($f)
    {
        $this->f = $f;
    }

    public function __invoke(Request $request, Response $response)
    {
        list($sessionName, $sessionId) = parseSession($request);
        $request->sessionId = $sessionId;
        $cookie = session_get_cookie_params();
        $lifeTime = null;
        if($cookie['lifetime']){
            $lifeTime = time() + $cookie['lifetime'];
        }
        $response->cookie($sessionName, $sessionId, $lifeTime, $cookie['path'], $cookie['domain'], $cookie['secure'], $cookie['httponly']);
        try{
            call_user_func($this->f, $request, $response);
        }
        finally{
            session_write_close();
            unset($_SESSION);
        }
    }

}

parseSession函數

function parseSession($request)
{
    $sessionName = session_name();
    $sessionId = session_create_id();
    if(isset($request->cookie[$sessionName])){
        $sessionId = $request->cookie[$sessionName];
    }
    return [$sessionName, $sessionId];
}

備註

其實只要瀏覽器生成了cookie,裏面有sessionId信息後就能夠標記一個用戶了,至於怎麼存儲數據,就看本身需求了。php

相關文章
相關標籤/搜索