0

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

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

4

1 回答 1

1

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

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

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

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

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

于 2013-06-05T09:47:20.727 回答