Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/csharp-4.0/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Cookies Can';不要把曲奇饼放在拉维4_Cookies_Laravel_Laravel 4 - Fatal编程技术网

Cookies Can';不要把曲奇饼放在拉维4

Cookies Can';不要把曲奇饼放在拉维4,cookies,laravel,laravel-4,Cookies,Laravel,Laravel 4,我使用的是最新版本的Laravel 4,无法设置cookies: Route::get('cookietest', function() { Cookie::forever('forever', 'Success'); $forever = Cookie::get('forever'); Cookie::make('temporary', 'Victory', 5); $temporary = Cookie::get('temporary'); retur

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

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'));
});
查看脚本:

@extends('layouts.master')

@section('content')
    Forever cookie: {{ $forever }} <br />
    Temporary cookie: {{ $temporary }} <br />
    Variable test: {{ $variableTest }}
@stop
无论我是刷新页面还是在一条路径中创建cookies,然后尝试在另一条路径中访问它们。我可以确认没有通过上述操作设置Cookie。Cookie'laravel_payload'和'laravel_session'以及'Memory_[HASH]'确实存在,我可以使用setcookie使用常规PHP设置Cookie


在我能找到的任何地方都不会抛出或记录错误。我在本地运行LinuxMint,在我的服务器上运行Debian,这两个版本都有nginx,我在这两个地方都有相同的问题。

Cookies不是这样使用的,它们是为下一个请求设置的,不是为当前请求设置的。您必须手动将它们附加到响应中,如中所述

所以这个代码

Cookie::forever('cookie', 'value');
$cookie = Cookie::get('cookie');
将不会得到任何结果,因为请求末尾未附加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'));
});

然后首先访问
yoursite.local/cookieset
,然后访问
yoursite.local/cookietest
,查看它是否以这种方式工作,cookie将被设置。

后过滤器可用于在控制器中设置cookie。假设cookie存储在控制器的类变量$cookie中。在控制器的构造函数中,以下代码将自动将cookie插入到返回给客户端的任何视图中:

public function __construct () {
    $cookie = &$this->cookie;
    $this->afterFilter(function ($route, $request, $response) use(&$cookie)  {
            if ($cookie) {
                $response->withCookie( $cookie );
            }
    });
}

laravel4中,我们使用
队列
获得预期的cookie行为

// Set a cookie before a response has been created
Cookie::queue('key', 'value', 'minutes');
例如:

Cookie::queue('username', 'mojoman', 60 * 24 * 30); // 30 days
Cookie::put('username', 'mojoman', 60 * 24 * 30); // 30 days
警告:在Laravel 3中使用
put
()

例如:

Cookie::queue('username', 'mojoman', 60 * 24 * 30); // 30 days
Cookie::put('username', 'mojoman', 60 * 24 * 30); // 30 days

+1用于排队。L4中队列方法的一个重要注意事项是:有两种方法
queued
queue
。前者是getter并返回已排队的cookie,后者将cookie排队。如果您不小心调用了
queued('name','value')
,它将自动失败,因为它可以接受两个参数:一个键和一个可选的默认值。