2015-03-18 5 views
0

Я использую Laravel 4 для разработки моего приложения. Но у меня есть проблема с настройкой cookie. Вот код в app/routes.php:
Невозможно установить cookie в laravel

Route::get('/', function(){ 
    // Set a cookie before a response has been created ?? 
    Cookie::queue('test0', '123', 10); 

    $app = App::getFacadeApplication(); 
    $version = $app::VERSION; 

    //Creating Custom Responses 
    $response = Response::make("<html><body> 
     Version: $version <br/> 
     <script type=\"text/javascript\"> 
      document.write(document.cookie); 
     </script> 
     </body></html>", 200); 

    $response->withCookie(Cookie::make('test1', '0123', 10)); 

    //Queue after response created 
    Cookie::queue('test2', '123', 10); 
    Cookie::queue('test3', '123', 10); 
    setcookie('test4', '123', time() + 60*10); 

    return $response->withCookie(Cookie::make('test5', '0123', 10)); 
}); 

Но когда я запускаю этот код, он не устанавливает все значения. Вот мой результат: result

Только PHP встроенный функция работы, любые другие функции, как Cookie::queue, withCookie не работает для меня, но в Cookies set by this page всплывающее окно, как на картинке выше, он по-прежнему есть все печенье Значение
Итак, в чем проблема?
И почему значение test2 не '123' ???

ответ

4

Это связано с тем, что вы создали файл cookie HttpOnly cookie.

HttpOnly cookie может использоваться только при передаче по HTTP (или HTTPS). Они недоступны через API без HTTP, например, JavaScript. Это ограничение смягчает, но не устраняет угрозу кражи файлов cookie сеанса посредством межсайтового скриптинга (XSS). HttpOnly cookies поддерживаются большинством современных браузеров.

Cookie::make() Метод принимает семь параметров. Вы можете установить httpOnly (значение по умолчанию - true) в false в laravel.

Cookie::make($name, $value, $minutes, $path, $domain, $secure, $httpOnly); 

Редактировать

В Laravel, значение куки автоматически шифруется ключом, который устанавливается в app/config/app.php по соображениям безопасности. Чтобы получить то, что вы хотите сделать, вам необходимо выполнить следующие два способа:

Просто используйте традиционный метод setCookie в php.

setcookie($name, $value, $expire, $path, $host, $secure, $httpOnly); 

В противном случае вы можете использовать этот сложный путь. Accessing unencrypted cookies

Надеюсь, это будет полезно для вас.

+0

Отлично. Это сработало. Но как мне получить реальное значение 'test2', оно все еще' eyJpdiI6IjlLR ... ', а не' 123'? – phibao37

+0

Я обновил свой ответ. –

+0

Большое спасибо! – phibao37

Смежные вопросы