HttpServer HttpRequest会话创建

时间:2013-06-04 23:21:12

标签: dart

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

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

1 个答案:

答案 0 :(得分:0)

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

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

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

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

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

相关问题