会话的使用类似于缓存:它填充了数据库中的某些数据,只是为了提供更快的访问权限。它可以持续20分钟。身份验证cookie全天有效,因为用户不希望每次会话期满时都登录。如有必要,我只是恢复会话。
// global.asax
void Application_PreRequestHandlerExecute(object sender, EventArgs e)
{
if (Session == null)
return;
// if special key is not present then session is expired
if (Session["filled"] == null)
{
if (User.Identity.IsAuthenticated)
{
FillSession(Session, User.Identity.Name);
}
}
}
现在,我想将会话设为只读,以实现更好的性能(Storing Anything in ASP.NET Session Causes 500ms Delays),并确保没有人可以使用它来存储超时后无法完全恢复的数据。可以使用httpContext.SetSessionStatebehavior(...)
方法来完成。因此,会话在大多数情况下应该是只读的,但是如果会话过期并且创建了新会话,则该会话应该是可写的,以便能够用数据填充它。重点是
我当前的解决方法是(尚未测试):
httpContext.SetSessionStatebehavior(...)
将会话设为只读,除非未找到表明会话必须可写的特殊cookie 。否则,请执行FillSession()并删除Cookie。您知道更好的解决方法吗?还是我的方法完全错误?