11

这里有一些我真的不明白:

我已经在服务器端快速运行,会话已初始化。

app.use(express.session({
    secret: 'mySecret'
    })
}));

正如这篇文章Confusion over session IDs using Connect中提到的,它向任何请求发送一个 connect.sid cookie。

在客户端,我想读取这个cookie的内容,感觉不可能:

angular.module('myApp.controllers', ['ngCookies','myApp.services'])
.controller('homeCtrl', function($scope, $cookies) {
    $cookies['test']='myValue';
    console.log($cookies);
});

当我运行它时,我在日志中得到了这个对象:Object {test: "myValue"},而如果我去 Chrome 调试器中的资源选项卡,我可以看到两个 cookie:

chrome 调试器中资源选项卡的屏幕截图

我究竟做错了什么 ?

是否无法从 angular 访问服务器制作的 cookie?

谢谢

4

2 回答 2

15

默认情况下,连接会话使用 httpOnly cookie(看这里)。

当设置了 httpOnly 标志时,总是禁止读取 cookie。

尝试禁用 httpOnly 标志:

app.use(express.session({
    secret: 'mySecret',
    cookie: { httpOnly: false }
}));
于 2013-03-08T18:54:58.807 回答
7

请注意,您不是在解决一个问题,而是在制造另一个更糟糕的问题。httpOnly 标志通常用于防御 XSS 攻击。有关详细信息,请参阅 OWASP 的此链接:https ://www.owasp.org/index.php/HttpOnly

有趣的故事在这里: http: //blog.codinghorror.com/protecting-your-cookies-httponly/

于 2014-03-28T12:44:45.920 回答