这里是nodejs服务器上的代码:(在npm install express和npm install cookie-parser之后)
const express = require('express');
var cookieParser = require('cookie-parser');
app.use(cookieParser());
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({
extended: true
}));
app.get('/setcookie', function (req, res) {
res.cookie('Token', "exampletoken", {
maxAge: 1000 * 60 * 60 * 24 * 30 * 12 * 3000,
httpOnly: true
}).send('Success!');
})
app.listen(80, function () {
//console.log("listening on 80")
});
网站上的代码:
<html>
<head>
<script>
function onload(){
alert(getCookie("Token"));
}
function getCookie(cname) {
var allcookies = document.cookie;
var arrayb = allcookies.split(";");
for (item in arrayb) {
if (item.startsWith("Token=")){
var c=item.substr(5);
return c;
}
}
}
</script>
</head>
<body onload="onload()>
</body>
</html>
它始终显示警告说&#34; undefined&#34;不管我做什么。我可以从服务器读取令牌,但我无法在前端读取它。 此外,如果您在本地服务器上托管它并尝试在Chrome上使用它,由于某些Web安全问题它无法工作,我在自定义Web视图(应用程序内部的一个cordova集)中使用它。 这背后的原因是cordova会在每次会话结束后自动删除cookie,所以我想将它们保存在本地存储中。
TL; DR: 它显示&#34; undefined&#34;而不是读取前端的cookie(onload代码),但我仍然可以在后端读取它。
答案 0 :(得分:2)
httpOnly: true
这告诉浏览器它应该使cookie仅对HTTP可用(即不到客户端JavaScript)。
要与客户端JS一起阅读,只需不要那样做。
将值设置为false
。
答案 1 :(得分:0)
除了设置为httpOnly: false
(访问javascript访问cookie所必需的)外,您必须使用for-of而不是for-in
function getCookie(cname) {
var arrayb = document.cookie.split(";");
for (const item of arrayb) {
if (item.startsWith("Token=")){
return item.substr(6);
}
}
}