Dart HttpServer HttpRequest会话创建

Dart HttpServer HttpRequest会话创建,dart,Dart,Dart HttpServer.listen返回HttpRequest。还有一个与服务器相关的超时,它控制HttpRequest保持活动状态的时间。HttpServer如何识别生成请求的内容(用于检索),如何存储请求,以及为什么保存请求 在我遇到的情况下,从浏览器的不同选项卡页访问同一服务器时使用相同的服务器请求。但是,如果使用不同的浏览器,则会创建不同的请求。是否可以强制服务器为选项卡式页面创建不同的请求?我认为您的问题混合了请求和会话。如果我误解了,请忽略 与HttpServer相关联的超时

Dart HttpServer.listen返回HttpRequest。还有一个与服务器相关的超时,它控制HttpRequest保持活动状态的时间。HttpServer如何识别生成请求的内容(用于检索),如何存储请求,以及为什么保存请求


在我遇到的情况下,从浏览器的不同选项卡页访问同一服务器时使用相同的服务器请求。但是,如果使用不同的浏览器,则会创建不同的请求。是否可以强制服务器为选项卡式页面创建不同的请求?

我认为您的问题混合了请求和会话。如果我误解了,请忽略

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

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

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


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

您是指请求还是会话?谢谢您的回答,正如你所说,我可能混淆了请求和会话。我只是刚刚开始研究这个问题,因为我正在做一个测试程序(为了变得更熟悉),结果(对我来说)出乎意料。结果类似于Gmail,它最初让我在从另一个标签访问时使用Gmail感到惊讶。然而,Yahoo Mail的表现似乎有所不同,并创建了一个新的会话。好吧,Yahoo Mail的表现确实有所不同(对于Gmail),但并没有为它出现的每个选项卡页面创建一个新会话。