![](/img/trans.png)
[英]When I use Express cookie-session, is it enough to delete the cookie client-side in order to logout?
[英]How can I access cookie-session from client side?
我正在使用NodeJS构建应用程序单页,并希望使用我的cookie会话(cookie-session npm)来验证用户是否已登录。 从我的节点服务器端,我可以获取并设置会话cookie,但我不知道如何从我的客户端获取。
这就是我从服务器端设置的方式:
req.session.user_id = user[0]._id;
user[0]._id
是我从我的mongodb获取的用户ID。
所以我们假设你已经配置了像这样的cookie-session
:
var cookieSession = require('cookie-session');
app.use(cookieSession({
keys: ['secret']
}));
然后让我们在会话中存储一些数据:
req.session.user_id = 123;
如果您查看浏览器的开发工具,您将看到2个cookie集:
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.sig
容易修改express:sess
但是除非他们也可以生成相应的express:sess.sig
服务器会知道它已被更改。
总而言之,我建议你看一下express-session
中间件。 这也使用cookie但它只使用它们来存储会话ID。 cookie中没有存储数据,这些数据都存储在服务器上。 这更类似于会话在大多数其他Web框架中的工作方式,但我无法确定哪种方法最适合您的需求。
无论您使用哪种方法,默认情况下httponly
将cookie设置为httponly
。 您将能够在浏览器的开发工具中验证这一点。 这意味着它包含在HTTP请求中,但无法通过客户端JavaScript访问。 这是一项安全措施,旨在使恶意代码更难以窃取cookie。 您可以使用以下命令在cookie-session
禁用此安全功能:
app.use(cookieSession({
httpOnly: false,
keys: ['secret']
}));
然后,您就可以使用document.cookie
访问这些cookie。
我重申这是一项安全措施,不建议将其关闭。 我无法判断这是否是您申请中真正关注的问题。
从您的问题中不清楚您是否确实想要从cookie中解析值或只是检查它的存在。 如果你需要解析它,那么你需要base64解码相关的cookie值,然后JSON解码它。
您可以采用各种替代方法来保持cookie的httponly
。 如果不了解您将如何处理这些信息,则很难具体说明。 如果您正在使用Express视图(即模板渲染),那么您可以在模板中完成所有工作。 如果您在SPA区域,那么您可以使用AJAX请求来收集相关信息。 在紧要关头,你甚至可以使用另一个cookie来提供所需的信息,同时保证会话cookie的安全。
Session是一个服务器的东西,你不能在客户端访问它,如果你的意思是cookie,那么,cookie不包含任何有关会话但指向它的ID。 如果要从客户端的会话中获取信息,则必须创建请求,然后服务器将会话信息发回。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.