我们的应用程序上的安全模型就像这样(我知道很简单):
public bool IsAuthenticated
{
get
{
if (Session[EnumsAndConstants.Keys.UserId] == null)
{
return false;
}
else
{
return true;
}
}
}
因此,基本上每个“受保护”的页面都有代码:
private void VLSProtectedPage_Init(object sender, EventArgs e)
{
if (!IsAuthenticated)
{
Response.Redirect("~/Login.aspx");
}
}
在我们的网络配置中,我们有一行:
<sessionState mode="SQLServer" sqlConnectionString="Data Source=xx;User Id=xx;Password=xx;" timeout="1" />
然而,1分钟的超时无效。如果我让页面空闲超过1分钟,我仍然会登录。
我从会话数据库中得到的结果也很奇怪:
SessionId Created Expires LockDate LockDateLocal LockCookie Timeout Locked ha4b05pqsnopfwu2wqiohkce2b7731d2 2011-08-17 14:24:07.303 2011-08-17 14:25:17.867 2011-08-17 14:24:17.840 2011-08-17 15:24:17.840 14 1 0
您可以看到创建的数据时间是'2011-08-17 14:24:07.303'但是我只在15:25登录了应用程序。所以看起来.net会话引擎早了1小时。我检查了系统日期时间,这是正确的。
总而言之,即使到期时间提前一小时这也意味着我的应用程序会立即超时,但它不会,它根本不会超时。
有什么想法吗?