2013-11-16 7 views
0

Я пытаюсь установить Cookie в Laravel 4 по определенному маршруту.Настройка Cookies в Laravel 4 работает только в App :: after()

К сожалению, установка Cookie работает только с глобальным фильтром App::after().

Первое, что я пробовал, возвращал ответ с Cookie из моего Controller.

Это не работает:

return Response::make($view)->withCookie(Cookie::make('foo','bar')); 

Однако это делает:

return Response::make()->withCookie(Cookie::make('foo','bar')); 

Но не решить мою проблему.

Далее я попробовал фильтр after следующим образом.

Route::filter('cookie', function($route, $request, $response) 
{ 
    $response->withCookie(Cookie::make('foo', 'bar')); 
}); 

Это также не работает.

Далее, я попробовал его с помощью Cookie::queue(), который я нашел в другом answer - не повезло.

Единственное место, где установлено Cookie, находится в App::after().

App::after(function($request, $response) 
{ 
    $response->withCookie(Cookie::make('foo', 'bar')); 
}); 

Кроме того, я уверен, что один из других подходов, должен работать, это решение не дает мне контроль я ищу.

Я бегу Laravel v4.0.9.

+0

Как вы пытаетесь получить доступ к файлу cookie? Помните, что файлы cookie недоступны до загрузки ** следующей ** страницы. Именно так работают cookie, независимо от реализации фреймворка. –

+0

Я использую (Browser) Web Inspector, чтобы проверить, установлен ли файл cookie или нет. –

+0

Я думаю, что проблема заключается в том, что вы устанавливаете cookie 'before', объект ответа еще не создан. Затем в вашем контроллере вы создаете «новый» Response :: return() и т. Д., Поэтому любые предыдущие значения перезаписываются. Вот почему он работает над вашим фильтром «after», потому что вы добавляете его в созданный объект. – Laurence

ответ

1

Попробуйте этот протестированный рабочий код.
Укажите время истечения (через несколько минут). Разве вы не используете какое-либо расширение cookie в своем браузере, которое может защитить/черный список указанных файлов cookie от изменения ...

Route::get('cookieset', function(){ 
    $cookie = Cookie::make('foo', 'bar', 60); 
    return Redirect::to('cookieget')->withCookie($cookie); 
}); 

Route::get('cookieget', function(){ 
    dd(Cookie::get('foo')); 
}); 
+0

Это действительно работает. Я реализовал его таким же образом (с использованием перенаправления). Однако перенаправление не позволяет загружать приложение должным образом, когда оно встроено в страницу Facebook с Fangate с использованием IE9 (приводит к циклу перенаправления). –

+0

IE требует немного больше усилий, чтобы заставить его работать в IE.Попробуйте установить этот заголовок 'App :: after (function ($ request, $ response) { $ response-> headers-> set ('P3P', 'CP =" NOI ADM DEV PSAi COM NAV OUR OTR STP IND DEM "'); });' – Andreyco

+0

Проблема не в IE, и я уже установил заголовок P3P, хотя мой выглядит как этот заголовок '$ response-> (' P3P ',' CP = 'IDC DSP COR ADM DEVi TAIi PSA PSD IVAi IVDi CONi HIS OUR IND CNT "); –