$http->on('request', new \Core\SessionMiddleware(function($request, $response){ }));
<?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); } } }
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