在前端使用的 HTTP 庫(比如 Axios)配置跨域
import axios from 'axios';
axios.defaults.withCredentials = true;
開發(fā)前后端分離 App,在 Webman 設(shè)置了跨域,但從前端訪問接口時使用session api取不到數(shù)據(jù),返回 NULL。
跨域中間件
class Access implements MiddlewareInterface
{
public function process(Request $request, callable $handle): Response
{
if ($request->controller == 'app\controller\XController') {
$response = $handle($request);
$response->withHeaders([
'Access-Control-Allow-Origin' => '*',
'Access-Control-Allow-Credentials' => 'true',
'Content-Type' => 'application/json;charset=UTF-8',
'Access-Control-Allow-Methods' => 'GET,POST',
'Access-Control-Allow-Headers' => '*'
]);
return $response;
} else {
return $handle($request);
}
}
}
前端要調(diào)用的登出 API
public function logout(Request $request)
{
$session = $request->session();
$uid = $session->get('uid'); // 取回 NULL
Token::where('uid', $uid)->delete();
$session->flush();
return json(['code' => 0, 'msg' => '完成。']);
}
OS: Windows 11 21H2
Webman: 1.5.0
Workerman: 4.1.10