0

我正在编写一个需要处理丢失连接的网络客户端。

如果您使用 HTTPS 连接到服务器并且 Internet 连接断开,服务器会丢失会话信息吗?

互联网连接恢复后,客户端需要重新登录服务器还是依赖服务器?

4

5 回答 5

5

通常,服务器确定会话的生存时间(通过定义会话超时)以及会话(如果有的话)在单个请求之间的持久性。服务器将带有会话信息(会话密钥)的 cookie 发送回客户端,因此当客户端发送包含会话 cookie 的下一个请求时,服务器知道要使用哪个会话。

话虽如此 - 两个请求之间没有信息,同时互联网连接是否丢失。只要服务器仍然有会话并且客户端仍然有相应的 cookie,一切都应该按预期工作。

另一方面,即使连接完全没有中断并且服务器和客户端都启动并运行,但没有相互交谈(即没有请求),会话可能会因为简单的超时而丢失服务器端。

因此,在服务器上,您可能会收到对受保护资源或需要特定会话状态的资源的请求——并且没有这样的会话。在客户端,您总是可能会收到表明需要登录的响应。

这两种情况都必须正确实施。

于 2013-07-06T16:02:37.503 回答
3

HTTP 协议本身是无状态的,即每个请求都按原样提供,与之前的或未来的请求没有任何关系。

为了克服这个问题,您可以使用客户端 Cookie。您的 cookie 可以保留一个会话状态标识符,该标识符可以在连接断开后发送回服务器以恢复先前的状态。

除此之外,您还可以构建一个会话管理模块来处理会话持久性。

于 2013-06-27T17:08:13.847 回答
1

首先,这取决于您正在谈论的会话类型:

  • ssl session 这会导致重新协商时间缩短。如果服务器支持它。这意味着它可以节省 CPU 时间。
  • 这里的 http 会话它不仅取决于服务器,还取决于您的网页代码。例如,如果会话在交付页面内容时中断。servlet 在刷新期间接收到连接重置,并可能使会话无效。
  • id 也取决于会话是否绑定到 IP 地址。这取决于新连接是否使用相同的 IP 地址。

正如您所料,没有简单的答案。因为它取决于很多点。

于 2013-07-08T12:00:25.533 回答
1

正如其他人已经说过的那样,您可以通过使用 SessionID 来“保持”连接,建议将其存储在 cookie 中。大多数现代环境(如 PHP 和 ASP.NET)都使用这种机制来处理丢失的连接。

有关实施安全会话管理的安全注意事项,请参阅https://www.owasp.org/index.php/Session_Management_Cheat_Sheet

此外,您可以使用 SSL 执行的操作是使用客户端证书构建会话管理。用户由颁发给他的唯一证书来识别。这样做的好处是客户端不必先登录。另一方面,您必须向每个客户颁发客户证书,这可能很复杂。

于 2013-07-09T05:36:56.337 回答
0

使用 cookie 存储会话信息,一旦连接丢失,您可以轻松地从 cookie 中获取信息。使用条件调用cookie,即如果会话丢失调用cookie。使用php在session中存储信息并调用cookie

于 2013-07-09T10:19:30.587 回答