我使用 laravel 5 作为 Rest API,我想在控制器中设置 cookie:
return response()->json(['success' => $data], $this-> successStatus)->cookie('name', 'myvalue');
Run Code Online (Sandbox Code Playgroud)
这样成功返回了response cookie,但是前面无法访问,我也用过:
Cookie::queue($name, $value);
Run Code Online (Sandbox Code Playgroud)
或者
Cookie::queue(Cookie::make('cookieName', 'value'));
Run Code Online (Sandbox Code Playgroud)
或者在谷歌、stackoverflow 中都可以,但这些都没有在浏览器中设置 cookie,我需要通过 laravel 控制器在浏览器中设置 http only cookie。我怎样才能做到这一点?
我也用了php cookie,没有成功
Cookie 只会设置在web中间件组上api。根据文档,Laravel 附带了web一个api中间件组,其中包含您可能想要应用于 Web UI 和 API 路由的常见中间件:
/**
* The application's route middleware groups.
*
* @var array
*/
protected $middlewareGroups = [
'web' => [
\App\Http\Middleware\EncryptCookies::class,
\Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse::class,
//...
],
'api' => [
'throttle:60,1',
'auth:api',
],
];
Run Code Online (Sandbox Code Playgroud)
如您所见,EncryptCookies和AddQueuedCookiesToResponse中间件仅应用于webgroup 而不是api.
// This works and sets encrypted cookie on response.
Route::group(['middleware' => ['web']], function () {
return response()
->cookie('name', 'value');
});
// This won't set cookie on response.
Route::group(['middleware' => ['api']], function () {
return response()
->cookie('name', 'value');
});
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4722 次 |
| 最近记录: |