首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >如何从客户端访问cookie-session?

如何从客户端访问cookie-session?
EN

Stack Overflow用户
提问于 2017-10-21 08:58:46
回答 2查看 10.7K关注 0票数 6

我正在使用NodeJS构建一个应用程序单页面,并希望使用我的cookie会话(cookie-session npm)来验证用户是否已登录。从我的节点服务器端,我可以获取和设置会话cookie,但我不知道如何从客户端获取。

这就是我从服务器端设置的方式:

代码语言:javascript
代码运行次数:0
运行
复制
req.session.user_id = user[0]._id;

其中user[0]._id是我从mongodb获得的用户id。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-10-21 16:25:50

因此,让我们假设您已经配置了如下所示的cookie-session

代码语言:javascript
代码运行次数:0
运行
复制
var cookieSession = require('cookie-session');

app.use(cookieSession({
    keys: ['secret']
}));

然后让我们在会话中存储一些数据:

代码语言:javascript
代码运行次数:0
运行
复制
req.session.user_id = 123;

如果你查看浏览器的开发工具,你会看到2个cookies集:

代码语言:javascript
代码运行次数:0
运行
复制
express:sess = eyJ1c2VyX2lkIjoxMjN9
express:sess.sig = 01I_Rx2gACezZI1tdl2-NvxPq6w

cookie express:sess是base64编码的。如果我们解码它,我们就会得到{"user_id":123}。重要的是要认识到会话数据存储在cookie本身中-这不仅仅是会话的id。

另一个cookie,express:sess.sig,是签名。此签名是使用密钥(在本例中为secret)生成的,用于帮助防止篡改。任何人修改express:sess都很容易,但是除非他们也能生成相应的express:sess.sig,否则服务器就会知道它已经被更改了。

话虽如此,我还是建议您看看express-session中间件。它也使用cookie,但它只使用cookie来存储会话id。cookie中不存储任何数据,所有数据都存储在服务器上。这更类似于会话在大多数其他web框架中的工作方式,但我不能确定哪种方法最适合您的需求。

无论使用哪种方法,默认情况下都应将cookie设置为httponly。您将能够在浏览器的开发工具中验证这一点。这意味着它包含在HTTP请求中,但不能通过客户端JavaScript访问。这是一种安全措施,旨在使恶意代码更难窃取cookie。您可以使用以下命令在cookie-session中禁用此安全功能:

代码语言:javascript
代码运行次数:0
运行
复制
app.use(cookieSession({
    httpOnly: false,
    keys: ['secret']
}));

然后,您将能够使用document.cookie访问这些cookies。

我重申这是一种安全措施,不建议将其关闭。我不可能判断这是否是您的应用程序中真正关心的问题。

从你的问题中还不清楚你是真的想从cookie中解析出这些值,还是只想检查它的存在。如果需要对其进行解析,则需要对相关的Cookie值进行base64解码,然后再对其进行JSON解码。

您可以采用多种替代方法来保持cookies的httponly。如果不知道更多关于如何处理这些信息的信息,就很难确定具体的信息。如果你使用的是Express视图(即模板渲染),那么你可以在模板中做所有的工作。如果您在SPA领域,那么您可以使用AJAX请求来收集相关信息。在紧要关头,您甚至可以使用另一个cookie为您提供所需的信息,同时保证会话cookie的安全。

票数 30
EN

Stack Overflow用户

发布于 2017-10-21 14:11:20

会话是服务器端的事情,你不能在客户端访问它,如果你指的是cookie,那么,cookie不包含任何关于会话的东西,只包含指向它的ID。如果你想从客户端的会话中获取信息,你必须创建一个请求,然后服务器将会话信息发回。

票数 -2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46859103

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档