在编写通过 Web 浏览器访问的 Web 服务时,一位共同维护者建议我们允许用户选择不使用 Cookie 登录到一个会话。(使用隐藏的 HTML 表单也是我们考虑过的事情,但我不太喜欢这个想法。JavaScript 是不可接受的。)
使用 Go 标准库的 HTTP 服务器或者其他机制,在设置时Connection: keep-alive
,是否可以识别传入的请求来自哪个网络连接?
- 存储指向
http.Request.TLS
(atls.ConnectionState
)的指针是行不通的,因为它的内存可能会被释放,而且地址可能会被重用,从而可能劫持会话。 - 我没有看到有用的价值
http.Request
。
通过以普通的 TCP/TLS/etc 连接接受请求、存储一些信息并http.Request
自己构建 s 来实现这一点绝对是可能的;但这似乎相当痛苦。
我认为这个问题背后的想法根本行不通,这意味着它也无法与 net/http 一起使用,无论它提供什么功能。我怀疑的理由如下:
这意味着您无法真正用“相同的 TCP 连接”或“相同的 TLS 会话”替换 HTTP 会话。此外,即使 HTTP 保持活动状态,空闲的 TCP 连接也会在一段时间后关闭,从而丢失“会话”。
所有这些都与所使用的库或编程语言无关。
因此,使用 HTTP cookies 在 HTTP 级别保持会话。这就是它们最初被发明的目的。所有坏名声只是因为“保持会话”也可能被滥用来跟踪用户等。但其他会话机制也是如此。