2

好的,基本上我正在尝试在我的 Web 应用程序中实现表单身份验证,为此我需要知道 Web 服务器如何确定请求是否为新请求。这是因为网络服务器为每个新请求创建一个新会话。

因此,我为每次成功登录创建一个authenticcoookie,它的持久cookie 将持续到超时,无论用户关闭他/她的浏览器或失去连接并且必须重新连接,因为此cookie 存储在客户端计算机上。因此,在这种情况下,假设用户重新连接到服务器并且他的 authenticatecoookie 还没有超时。所以他的请求因此已经通过了身份验证,那么这是否也意味着这不是一个新的请求?并且服务器不会为它创建一个新会话,因为它已经退出了?

另一种情况/场景是,如果在用户重新连接之前authenticatecoookie 超时,则该请求将不会被验证,但该请求是否也被视为新请求,因此服务器不会为其创建新会话。为它退出?

我问这个是因为一旦用户成功登录,我在会话中存储用户 ID 以便当 authenticatecoookie 超时时,我可以去检索会话中的用户 ID,因为会话超时很晚比 authenticatecoookie 更新,然后更新我的用户表以指示该用户不再登录

4

1 回答 1

1

因此,在这种情况下,假设用户重新连接到服务器并且他的 authenticatecoookie 还没有超时。所以他的请求因此已经通过了身份验证,那么这是否也意味着这不是一个新的请求?

从表单身份验证系统的角度来看,这不是一个新请求,因为该请求提供了一个有效的表单身份验证 cookie。

并且服务器不会为它创建一个新会话,因为它已经退出了?

会话处理机制不同于表单认证机制。客户端可以使用有效的表单身份验证 cookie 和没有有效的会话 cookie 来访问服务器(并且,由于这些机制是不同的,任何组合都是可能的)因此,如果需要会话并且客户端没有,服务器将创建一个新会话一。

这样当 authenticatecoookie 超时时,我就可以去检索会话中的用户 ID,因为会话超时比 authenticatecoookie 晚得多

如果您的站点主要基于身份验证,也许您应该通过配置比会话持续时间更长的表单身份验证持续时间来执行此操作。

  • 在您的页面/控制器/操作上强制执行表单身份验证
  • 在您的页面/操作处理期间,确保用户 ID 存储在会话中。如果没有,请将其存储以便在 session_end 上可用
于 2013-06-18T09:18:32.263 回答