【问题标题】:Can a Express session works without cookie?Express 会话可以在没有 cookie 的情况下工作吗?
【发布时间】:2017-07-23 16:24:14
【问题描述】:

会话是服务器端对象,驻留在服务器上。每个会话都有一个会话 ID。会话 ID 是一个唯一编号,服务器在特定用户访问(会话)期间分配给他。默认情况下,会话 ID 附加到 cookie,并且在请求/响应期间,该 cookie 将在客户端到服务器(以及服务器到客户端)之间共享。服务器将根据从 cookie 中检索到的会话 ID 来识别会话。

所以我想知道 Express 会话是否可以在无 cookie 的情况下工作?

【问题讨论】:

标签: node.js session express cookies


【解决方案1】:

所以我想知道 Express 会话是否可以在无 cookie 的情况下工作?

没有。实际的 express-session 模块仅适用于 cookie。它将会话 ID 存储在 cookie 中,以便来自该特定浏览器的下一页请求或 Ajax 请求将包含该 cookie,并且 express-session 可以查找与该会话 ID 对应的适当服务器端会话对象。

可以创建不使用 cookie 的会话系统。这通常通过将会话 ID 作为查询参数放入 URL 中来完成,如下所示:

http://somedomain.com/somepath?sessionID=0823408234

但是,以这种方式构建网站要麻烦得多,除非您使用的渲染系统可以为您修复所有链接(页面中希望保留会话的所有链接都必须在查询参数),它会抛出书签和许多其他问题。

但是,express-session 不这样做。它需要一个 cookie。

【讨论】:

  • 不会在 url 中发送会话 ID 是一个安全问题?
  • @AbhishekAnand 是的,这就是人们使用基于域的 cookie 来存储会话 ID 的原因。因此其他域将无法跟踪您的会话 ID。
  • 这正是我所需要的:可以创建一个不使用 cookie 的会话系统。你能给我举个例子吗?我正在尝试模拟快速会话以用于 sigin 路由的单元测试目的,但 supertest-session 不起作用:(
  • @JRichardsz - 如果您不打算使用包含 sessionID 的 cookie,那么您必须将 sessionID 放入自定义标头或 URL(作为路径的一部分或更典型地作为查询参数)。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-01-14
  • 2014-08-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-07-15
  • 1970-01-01
相关资源
最近更新 更多