通过多个实例扩展Web应用程序是Azure云的最大优势之一。为了实现对我们的Web角色云应用程序的多个VM支持,我们正在实现Azure Redis缓存。我们正在使用RedisSessionStateProvider提供程序来维护会话状态。以下是web.config文件中会话管理的配置设置。
<authentication mode="Forms"> <forms loginUrl="~/Login" slidingExpiration="true" timeout="20" defaultUrl="~/Default" /> </authentication> <sessionState timeout="20" mode="Custom" customProvider="MySessionStateStore"> <providers> <add name="MySessionStateStore" type="Microsoft.Web.Redis.RedisSessionStateProvider" host = "dummy.redis.cache.windows.net" port = "6380" accessKey = "dummysecretkey" ssl = "true" throwOnError = "true" retryTimeoutInMilliseconds = "5000" databaseId = "0" applicationName = "" connectionTimeoutInMilliseconds = "5000" operationTimeoutInMilliseconds = "1000" connectionString = ""/> </providers>
我们的问题是会话超时不会随着用户的回发而延长,假设我们的用户在10:00 AM登录到应用程序,那么他的会话数据将在绝对10:20 AM过期。如果用户在10:15 AM回发,则会话应在10:35 AM到期,但这没有发生,它在10:20 AM绝对到期。
以下是登录按钮的单击事件中的代码
protected void Button1_Click(object sender, EventArgs e) { FormsAuthentication.SetAuthCookie(TextBox1.Text.Trim(), true); ConnectionMultiplexer connection = ConnectionMultiplexer.Connec("dummy.redis.cache.windows.net,ssl=true,password=dummysecretkey"); IDatabase cache = connection.GetDatabase(); Session["UserName"] = TextBox1.Text; Response.Redirect("Default.aspx"); }
如果能让我知道在滑动模式下获得会话超时需要做什么,我将不胜感激。最好的祝福,
HR亚达夫
感谢您报告问题。我们已经发布了RedisSessionStateProvider NuGet软件包的新版本,该版本修复了上面报告的错误。
https://www.nuget.org/packages/Microsoft.Web.RedisSessionStateProvider/1.5.0
编辑:我们发现了另一个问题。ASP.NET不会为AJAX请求调用ResetItemTimeout,而是其他会话状态方法的责任来滑动会话超时。我们已修复此错误,并发布了新的NuGet程序包:https : //www.nuget.org/packages/Microsoft.Web.RedisSessionStateProvider/1.6.5
让我们知道这是否解决了您的问题?