如何在服务器端设置的前端代码中检索cookie?

时间:2017-08-21 14:13:24

标签: javascript node.js cordova cookies

这里是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代码),但我仍然可以在后端读取它。

2 个答案:

答案 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);
    }
  }
}