最近项目中遇到需要对单个Session的过期时间进行特殊处理
很多人是这样理解的
---------------------------------------------------------------------------------------------
protected void SetSession()
{
Session["user"]="UserName";
Session.Timeout = 20;
}
20是分钟
这是对单个的设置,
对整体应该在Web.config里修改
<sessionState mode="InProc" cookieless="true" timeout="20"/>
---------------------------------------------------------------------------------------------
但是看看Session.Timeout = 20;这句,根本就不像对单个Session进行处理,而像是对所有的Session进行处理,于是动手做了个demo验证一下
Default.aspx
protected void Page_Load(object sender, EventArgs e)
{
Response.Write("user1:" + Session["user1"]);
Response.Write("user2:" + Session["user2"]);
}
User1.aspx
protected void Page_Load(object sender, EventArgs e)
{
Session["user1"] = "user1";
Session.Timeout = 2;
}
user2.aspx
protected void Page_Load(object sender, EventArgs e)
{
Session["user2"] = "user2";
Session.Timeout = 1;
}
编译后,我进行了以下测试:
1.按照以下顺序执行了上面的3个页面:User1.aspx、User2.aspx、Default.aspx,显示“user1:user1user2:user2”。如果按照其它人理解的那样,应该过了一分钟后,显示为:“user1:user1user2:”,实际上的显示结果为:“user1:user2:”,说明后面的Session.Timeout = 1影响到了前面的Session.Timeout = 2。
2.按照以下顺序执行了上面的3个页面:User2.aspx、User1.aspx、Default.aspx,显示“user1:user1user2:user2”。如果按照其它人理解的那样,应该过了一分钟后,显示为:“user1:user1user2:”,实际上的显示结果为:“user1:user1user2:user2”,说明后面的Session.Timeout = 2影响到了前面的Session.Timeout = 1。
由此证明,Session.TimeOut是会影响全部Session的,Session的过期时间是从你最后的一次操作开始计时的。