无法在Laravel 4中设置cookie

Bea*_*eau 5 cookies laravel laravel-4

我使用的是最新版本的Laravel 4,我无法设置cookie:

Route::get('cookietest', function()
{
    Cookie::forever('forever', 'Success');
    $forever = Cookie::get('forever');
    Cookie::make('temporary', 'Victory', 5);
    $temporary = Cookie::get('temporary');
    return View::make('cookietest', array('forever' => $forever, 'temporary' => $temporary, 'variableTest' => 'works'));
});
Run Code Online (Sandbox Code Playgroud)

查看脚本:

@extends('layouts.master')

@section('content')
    Forever cookie: {{ $forever }} <br />
    Temporary cookie: {{ $temporary }} <br />
    Variable test: {{ $variableTest }}
@stop
Run Code Online (Sandbox Code Playgroud)

产量:

Forever cookie: 
Temporary cookie: 
Variable test: works
Run Code Online (Sandbox Code Playgroud)

如果我刷新页面或在一个路径中创建cookie并尝试在另一个路径中访问它们并不重要.我可以确认没有使用上述操作设置cookie.cookies'laravel_payload'和'laravel_session'以及'remember_ [HASH]'确实存在,我可以使用setcookie使用常规PHP设置cookie.

在我能找到的任何地方都不会抛出或记录任何错误.我在本地运行Linux Mint,在我的服务器上运行Debian,都使用nginx,我在两个地方都有同样的问题.

Ant*_*ani 16

Cookie不应该像这样使用,它们被设置为下一个请求,而不是当前请求.您必须手动将它们附加到您的响应,如文档中所述.

所以这段代码

Cookie::forever('cookie', 'value');
$cookie = Cookie::get('cookie');
Run Code Online (Sandbox Code Playgroud)

将得不到任何结果,因为cookie未在请求结束时附加.

您可以通过将它分成两个路径来尝试它

Route::get('cookieset', function()
{
    $foreverCookie = Cookie::forever('forever', 'Success');
    $tempCookie = Cookie::make('temporary', 'Victory', 5);
    return Response::make()->withCookie($foreverCookie)->withCookie($tempCookie);
});


Route::get('cookietest', function()
{
     $forever = Cookie::get('forever');
     $temporary = Cookie::get('temporary');
     return View::make('cookietest', array('forever' => $forever, 'temporary' => $temporary, 'variableTest' => 'works'));
});
Run Code Online (Sandbox Code Playgroud)

然后首先访问yoursite.local/cookieset,然后yoursite.local/cookietest看到它以这种方式工作,并将设置cookie.


Igo*_*rra 15

Laravel 4中,我们得到了预期的cookie行为queue.

// Set a cookie before a response has been created
Cookie::queue('key', 'value', 'minutes');
Run Code Online (Sandbox Code Playgroud)

例:

Cookie::queue('username', 'mojoman', 60 * 24 * 30); // 30 days
Run Code Online (Sandbox Code Playgroud)

警告:在Laravel 3中使用put(http://v3.golaravel.com/api/class-Laravel.Cookie.html#_put).

例:

Cookie::put('username', 'mojoman', 60 * 24 * 30); // 30 days
Run Code Online (Sandbox Code Playgroud)