gpt4 book ai didi

php - Laravel Cookie 未通过 Javascript 显示

转载 作者:行者123 更新时间:2023-12-03 01:04:50 25 4
gpt4 key购买 nike

我是学习 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 对话框在 View 页面中显示 cookie。 “getcookie” View 页面如下所示::

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

function showCookies(){

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

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

我在弹出对话框中看到的唯一内容是“Cookie 是”。我期望的值没有出现。

我绝对知道我做错了什么,因为当我检查 chrome 开发人员工具中的 cookie 时,我看到“setcookie”路线,键 REQUEST COOKIE 和 RESPONSE_COOKIE (laravel_session 和 low-carb)都有值,但对于重定向到的“getcookie”路由,chrome中的REQUEST COOKIE键同时具有“laravel_session和low-carb”,但RESPONSE_COOKIE键只有“laravel_session”并且缺少“low-carb”键值。

我做错了什么?

最佳答案

默认情况下,Laravel cookie 被标记为 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 的开发工具中,转到“资源”,然后转到“Cookie”,然后转到“您的域”,该表中有一个名为“HTTP”的列 - 它有一个如果该 cookie 是 HTTPonly,请勾选。

编辑:所有 cookie 在 Laravel 中都经过加密和签名,因此用户无法篡改它们。个人对此并不是 100% - $_SESSION 用于用户无法编辑的持久数据,$_COOKIE 用于您希望用户能够读取和编辑的数据。无论如何,只要使用 PHP 的原生即可:

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

如果你想这样做,而不是 laravel 方法。

您可能还想考虑是否有“更好”的方法来处理这个问题 - 也许您无论如何都不需要 Cookie(请记住,它们是随每个与 cookie 路径、CSS、JS 匹配的请求一起发送的)图像、字体 - 一切)

关于php - Laravel Cookie 未通过 Javascript 显示,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25846628/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com