【问题标题】:Does the IReadOnlySessionState resets timeouts if slidingExpiration is enabled?如果启用了slidingExpiration,IReadOnlySessionState 是否会重置超时?
【发布时间】:2014-11-07 16:24:18
【问题描述】:
众所周知,当您启用slidingExpiration (slidingExpiration="true") 时,每次请求都会重置身份验证超时。但是我不确定,而且我无法找到实际发生的时间。无论是在请求获取资源时发生还是在发布时发生。如果第二个为真,则当我们正在实现 IRequiresSessionState 时,slidingExpiration 只会重置超时,因为它是唯一获取排他锁的接口,因此唯一需要释放项(SetAndReleaseItemExclusive)的接口。
【问题讨论】:
标签:
session
session-state
readonly
【解决方案1】:
嗯,我找到了使用这两个界面的解决方案并观察结果... 启用slidingExpiration 后,无论您使用的是IReadOnlySessionState 还是IRequiresSessionState,都会重置tiemeout
在我试穿的场景下。
我有一个应用程序,它有一些经典的 ASP 屏幕与 .Net 页面一起使用。如果用户只使用经典 ASP 页面,为了避免超时,我有一个名为 KeepAlive (KeepAlive.ashx) 的通用处理程序,每次打开经典 ASP 页面时都会调用它。 ashx的代码很简单
public class KeepAlive : IHttpHandler, IRequiresSessionState
{
/// <summary>
/// Processes the request
/// </summary>
/// <param name="context"></param>
public void ProcessRequest(HttpContext context)
{
}
}
我在 web.config 中更改了<sessionState timeout="1" />,因此我不需要等待 20 分钟:P 并且我将 KeepAlive 更改为使用 IReadOnlySessionState。如果我在 1 分钟的时间范围内继续打开经典的 ASP 屏幕,我不会收到身份验证超时,这意味着无论是否使用独占锁,超时都会被重置。
希望这对其他人有帮助:)