使用通配符映射时,ASP.NET表单身份验证超时的最佳解决方法是什么?

时间:2020-03-05 18:51:52  来源:igfitidea点击:

我的团队正在一个肮脏的旧网站上工作,大多数页面仍然是ASP经典版本。但是,我们最近已迁移到使用ASP.NET和通配符映射的表单身份验证。除了一件事之外,一切都运行良好,令人惊奇:登录的用户超时太快。在查看日志后,人们似乎正好在20分钟后超时(这是由于不活动而导致的指定超时)。

因此,我们的假设是ASP经典页面不会触发重置身份验证计时器的表单身份验证框架中的任何机制。我在Google周围搜索甚至阅读了Great Gu的通配符映射文章,但仍然找不到其他遇到此问题的人。因此,1)我们见过这个问题吗?和2)最好的解决方法是什么? (除了在每个要在后台加载愚蠢的.NET页的垃圾ASP页中手动放置一个隐藏的框架之外)

更新:lidingExpiration设置为true

另外:我们无法使用永久会话,因为我们需要应用程序在20分钟不活动后超时。另外,编写此可怕的站点是为了使该接口通常存储在页面中。没有简单的接口代码可以将JavaScript插入其中。我们试图将js放入包含文件的js文件中,该文件被我们大约80%的页面调用,但是这导致文件下载缓冲区出现了一些深奥的问题,因此我们可能不得不尝试其他方法。谢谢。

解决方案

回答

创建一个永久会话。

本质上,我们最终会在母版页或者导航用户控件(无论用于一致导航的内容)中发出一些JavaScript和图像标签。此JavaScript会在一定间隔内将图像标记的来源更改为http处理程序终结点(某些.aspx,.ashx),该终结点将返回1x1 pix clear gif作为图像的响应。持续的请求可确保空闲页面使会话保持活动状态。

只要浏览器窗口对页面打开,ASP.NET会话就永远不会超时。

通常,JavaScript会对请求添加随机数,以使浏览器不会缓存该请求。

此处提供不错的演练。

回答

我假设我们已经手动创建了cookie,在这种情况下,代码中的超时值可能会覆盖配置中的超时值。

首先,如果可能(可能不是),请不要手动创建cookie,这不仅可以使我们免于头痛,而且可以避免许多其他麻烦。

如果必须手动创建cookie,请确保我们正在使用的超时实际上正在读取我们在配置文件中设置的超时值,并且滑动到期设置为true(我们说过的)。

也就是说,手动创建Cookie时,偶尔还会出现奇怪的超时问题。在我工作的地方,我们实施了一个解决方案,该解决方案允许自动创建Cookie,并且不再存在超时问题。但是,它确实造成了其他问题,我们被迫退回。