Php 曲奇在拉威尔不起作用?

Php 曲奇在拉威尔不起作用?,php,laravel,cookies,Php,Laravel,Cookies,当一个新用户访问我的网站时,我想将他们重定向到/welcome,但只有一次,我想这样做,我可以使用cookies,在他们访问了welcome页面后设置一个cookie,然后在将他们发送到/welcome之前检查cookie是否存在 这里有一个基本控制器 class BaseController extends Controller { public function __construct(Request $request) { $this->checkW

当一个新用户访问我的网站时,我想将他们重定向到/welcome,但只有一次,我想这样做,我可以使用cookies,在他们访问了welcome页面后设置一个cookie,然后在将他们发送到/welcome之前检查cookie是否存在

这里有一个基本控制器

class BaseController extends Controller
{
    public function __construct(Request $request) 
    {
        $this->checkWelcome($request);
    }

    private function checkWelcome(Request $request) {
        $currentRoute = Route::currentRouteName();

        if ($currentRoute != 'frontend.guest.welcome' && Cookie::get('visited_welcome') != '1') {
            header('location: ' . route('frontend.guest.welcome'));
            exit();
        }
    }
}
发送到
frontend.guest.welcome
时,它有一条到WelcomeController的路线

Route::get('/welcome', ['uses' => 'WelcomeController@getView', 'as' => 'frontend.guest.welcome']);
class WelcomeController extends BaseController
{
    public function getView()
    {
        Cookie::forever('visited_welcome', '1');

        return view('frontend.guest.welcome');
    }
}
这是Welcome控制器

Route::get('/welcome', ['uses' => 'WelcomeController@getView', 'as' => 'frontend.guest.welcome']);
class WelcomeController extends BaseController
{
    public function getView()
    {
        Cookie::forever('visited_welcome', '1');

        return view('frontend.guest.welcome');
    }
}

问题是,它不断地发送给/welcome,不是一次而是始终发送。

如果您没有返回带有响应的cookie,请将其附加到响应,如下所示:

public function checkWelcome(Request $request) {
{
    if (!$request->cookie('visited_welcome')) {
        return redirect('frontend.guest.welcome')->withCookie(Cookie::forever('visited_welcome', '1'));
    }

    // otherwise proceed as normal
}
或者,您可以在Cookie facade上使用
队列
方法:

Cookie::queue(Cookie::forever('visited_welcome', '1'));

更好的方法可能是使用中间件,这样您就不需要在控制器代码中实现任何检查。例如:

// CheckIfFirstTimeVisit.php
public function handle(Request $request, Closure $next)
{
    if ($request->cookies->has('visited_welcome')) {
        return $request($next);
    }

    return response()->view('frontend.guest.welcome')
                     ->withCookie(Cookie::forever('visited_welcome', '1'));
}

尝试在app\Http\Middleware\EncryptCookies.php中删除cookie

class EncryptCookies extends Middleware
{
    /**
     * The names of the cookies that should not be encrypted.
     *
     * @var array
     */
    protected $except = [
        'visited_welcome'
    ];
}

伊卢。我和这个吵了几个小时。