Cookies Can';不要把曲奇饼放在拉维4
我使用的是最新版本的Laravel 4,无法设置cookies: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
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')
,它将自动失败,因为它可以接受两个参数:一个键和一个可选的默认值。