Печенье Laravel не появляется через Javascript

Я новичок в изучении Laravel и имею следующее в моем файле маршрута:

Route::get("/setcookie", function(){
$cookie = Cookie::make("low-carb","almond cookie",30);
return Redirect::to("getcookie")->withCookie($cookie);
});

Route::get("/getcookie", function(){
$cookie = Cookie::get("low-carb");
return View::make("getcookie")->withCookie($cookie);
});

Я установил cookie и перенаправил на другую страницу. Я хочу, чтобы иметь возможность показать куки через диалоговое окно JavaScript на странице просмотра. Страница просмотра «getcookie» выглядит следующим образом:

<html>
<body>
this is the cookie page
<script language="javascript">
window.onload = showCookies;

function showCookies(){

alert("Cookie is: " + document.cookie);
}

</script>
</body>
</html>

Единственное, что я вижу во всплывающем диалоговом окне, это «Cookie is». Ожидаемое значение не отображается.

Я точно знаю, что делаю что-то не так, потому что когда я проверяю куки в инструментах разработчика Chrome, я вижу для маршрута «setcookie» ключи REQUEST COOKIE и RESPONSE_COOKIE (laravel_session и low-carb) оба имеют значения, но для «getcookie» «На маршруте, куда он перенаправлен, ключ REQUEST COOKIE в chrome имеет как« laravel_session », так и ключ« low-carb », но ключ« RESPONSE_COOKIE »имеет только« laravel_session », а значение« low-carb »отсутствует.

Что я делаю неправильно?

2

Решение

По умолчанию куки Laravel помечаются как httponly — это означает, что к ним нельзя получить доступ через JS. Это часто то, что вы хотите, следовательно, это по умолчанию.

Если вы посмотрите на источник здесь: https://github.com/laravel/framework/blob/master/src/Illuminate/Cookie/CookieJar.php#L41, вы увидите, что подпись метода выглядит так:

public function make($name, $value, $minutes = 0, $path = null, $domain = null, $secure = false, $httpOnly = true)

где последняя переданная переменная является переменной httpOnly.

Итак, если вы измените с:

Cookie::make("low-carb","almond cookie",30);

в

Cookie::make("low-carb","almond cookie",30, null, null, false, false);

Тогда ваш файл cookie не будет помечен как httponly и будет доступен через JS.

Вы можете проверить, является ли файл cookie httponly или нет, с помощью инструментов разработки вашего браузера, в Chrome Dev Tools перейдите в раздел Ресурсы, затем в Cookies, затем в домен oyur, и в этой таблице есть столбец с именем HTTP — у него есть галочка, если куки только HTTP.

Изменить: Все куки зашифрованы и подписаны в Laravel, так что пользователи не могут подделать их. Не 100% лично — $ _SESSION для постоянных данных, которые пользователь не может редактировать, $ _COOKIE для данных, которые вы хотите, чтобы пользователь мог читать и редактировать. В любом случае, просто используйте родной язык PHP:

setcookie("low-carb", "almond cookie", time()+(30*60));

вместо метода laravel, если вы хотите сделать это.

Вы также можете подумать, есть ли «лучший» способ справиться с этим — возможно, вам все равно не нужны файлы cookie для этого (помните, что они отправляются с каждым запросом, который соответствует пути cookie, CSS, JS, изображениям, шрифтам). — все)

7

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]