把这里改写一下
$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信息后就可以标记一个用户了,至于怎么存储数据,就看自己需求了。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。