是啥使请求成为asp.net C#中的新请求

Posted

技术标签:

【中文标题】是啥使请求成为asp.net C#中的新请求【英文标题】:what makes a request a new request in asp.net C#是什么使请求成为asp.net C#中的新请求 【发布时间】:2013-06-14 07:18:20 【问题描述】:

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

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

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

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

【问题讨论】:

【参考方案1】:

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

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

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

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

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

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

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

【讨论】:

@jbl...有趣,我想我会尝试您的建议...如果我理解正确,您建议我使表单身份验证超时时间更长,会话超时并在会话中存储用户标识符因此,当会话超时时,会引发 on session_end 事件,然后我可以从该会话中获取用户标识符信息,然后相应地更新我的用户表,然后结束该用户的表单身份验证,以便下次收到来自该用户的请求时将未经身份验证,因此用户将不得不再次登录...我是正确的? @FabioDelarias 是的。除了你不能在不从客户端删除 cookie 的情况下结束表单身份验证(这在 session_end 中是不可能的)。表单身份验证持续时间必须“稍微”长一些。此答案底部的会话/表单身份验证持续时间的有趣链接***.com/a/15199149/1236044

以上是关于是啥使请求成为asp.net C#中的新请求的主要内容,如果未能解决你的问题,请参考以下文章

ASP.NET页面文件后缀名是啥?还有基于C#的ASP.NET程序文件的后缀是啥?

在 asp.net 中锁定缓存的最佳方法是啥?

ASP.NET MVC - 请求周期中可以检测到静态资源请求的最早点是啥?

使用 HttpClient 压缩对 asp.net core 2 站点的请求的最佳方法是啥?

[译] ASP.NET 生命周期 – ASP.NET 请求生命周期

ASP.NET Core入门五