我在自定义中间件中有以下代码:
public function handle($request, Closure $next)
{
if($request->hasCookie('uuid')) {
return $next($request);
}
$uuid = 99;
$response = $next($request);
return $response->withCookie(cookie()->forever('uuid', $uuid));
}
我已在app.php文件中注册了中间件,但仍未编写Cookie。请任何人都可以帮忙。另外,上面这个可以作为单例运行,以便在app start上执行一次吗?
由于
答案 0 :(得分:5)
在这里,我提到了set并在laravel简单示例中获取了一个cookie。
首先创建一个控制器。
1. php artisan make:controller CookieController
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use Illuminate\Http\Response;
use App\Http\Requests;
use App\Http\Controllers\Controller;
class CookieController extends Controller {
**/* below code a set a cookie in browser */**
public function setCookie(Request $request){
$response = new Response('Hello World');
$response->withCookie(cookie('name', 'Anything else'));
return $response;
}
**/* below code a get a cookie in browser */**
public function getCookie(Request $request){
$value = $request->cookie('name');
echo $value;
}
}
在routes / web.php文件中添加以下行代码(Laravel 5.4)
Route::get('/cookie/set','CookieController@setCookie');
Route::get('/cookie/get','CookieController@getCookie');
所有文件加载项目都比运行程序轻松设置并获取cookie。
答案 1 :(得分:2)
如果您在本地环境中,请确保在'secure' => env('SESSION_SECURE_COOKIE', false),
文件的#165-170行周围设置config/session.php
。
在非SSL域(如http://localhost/
)上,此伪指令必须为false
。否则,将不会在浏览器中设置cookie。
答案 2 :(得分:1)
您可以像middleware一样获取响应对象:
public function handle($request, Closure $next)
{
$response = $next($request);
// Do something after the request is handled by the application
return $response;
}
所以你可以做这样的事情
if($request->hasCookie('uuid')) {
return $next($request);
}
$uuid = Uuid::generate();
$response = $next($request);
return $response->withCookie(cookie()->forever('uuid', $uuid));