【问题标题】:HttpServer HttpRequest session creationHttpServer HttpRequest 会话创建
【发布时间】:2013-06-04 23:21:11
【问题描述】:

Dart HttpServer.listen 返回一个 HttpRequest。还有一个与服务器相关的超时,它控制 HttpRequest 保持活动的时间。 HttpServer如何识别是什么产生了请求(用于检索),它如何存储请求,为什么要保存它们?

在我遇到的情况下,从浏览器的不同标签页访问同一服务器使用了相同的服务器请求。但是,如果使用不同的浏览器,似乎会创建不同的请求。是否可以强制服务器为标签页创建不同的请求?

【问题讨论】:

  • 你说的是请求还是会话?

标签: dart


【解决方案1】:

我相信您的问题混合了请求和会话。如果我理解错了,请忽略。

与 HttpServer 关联的超时(我假设您的意思是 HttpServer.sessionTimeout)控制会话的生命周期,而不是请求。

会话基于 cookie。服务器将会话标识符写入 cookie。然后,此 cookie 用于浏览器和服务器之间的通信,因此服务器会检查 cookie,并为您提供适当的会话以供使用。这是一个典型的实现,一些框架允许将整个会话存储在 cookie 中,但它有很多缺点,我不会赘述。 Dart 的HttpSession 只是一个内存映射,它在内部映射到会话cookie 值。

由于浏览器选项卡(至少对于大多数浏览器,我不是这方面的专家)共享 cookie,因此从任何选项卡对同一域的请求将导致使用相同的会话。当然,另一个浏览器使用它自己的 cookie 存储,所以你在那里有不同的会话。

这个问题有时可以通过在 URL 中编码会话 ID 来解决(谷歌的“URL 编码会话 ID”,因为实现是特定于所选后端的),但我没有看到任何支持的方式将该方法插入 @ 987654323@上课。会话创建在 _HttpSessionManager 类型中实现,该类型是 dart:io 库的私有类型,并且不提供任何公共扩展点,因此您很可能需要包装自己的支持。

【讨论】:

  • 感谢您的回答,正如您所说,我可能对请求和会话感到困惑。我才刚刚开始研究这个,因为我正在做一个测试程序(为了变得更加熟悉),以及(对我来说)出乎意料的结果。结果类似于例如。 Gmail 从另一个选项卡访问时使用 Gmail 最初让我感到惊讶。但是,Yahoo Mail 的行为似乎有所不同,并创建了一个新会话。
  • 嗯,雅虎邮件的行为确实不同(与 Gmail 不同),但不会为它出现的每个标签页创建新会话。
猜你喜欢
  • 2010-10-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-06-23
  • 2021-12-14
  • 2016-01-24
  • 2018-09-10
相关资源
最近更新 更多