swoole之session的实现

 阅读约 3 分钟

把这里改写一下

$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信息后就可以标记一个用户了,至于怎么存储数据,就看自己需求了。

阅读 231发布于 12月3日
推荐阅读
目录