session.abandon() 会不会触发 session_end
时间: 2023-09-18 20:15:53 浏览: 50
在 ASP.NET 中,`Session.Abandon()` 方法会使当前会话状态无效,但并不会立即触发 `Session_End` 事件。`Session_End` 事件只有在当前会话超时、被销毁或应用程序关闭时才会被触发。
当会话状态无效时,ASP.NET 会在一段时间后自动清理会话数据并触发 `Session_End` 事件。这个时间间隔可以在 web.config 文件中配置,如下所示:
```
<sessionState timeout="20"></sessionState>
```
上面的代码将会话超时时间设置为 20 分钟。也就是说,如果当前会话状态在 20 分钟之内没有任何请求,它将会被自动销毁并触发 `Session_End` 事件。
因此,如果你想要立即触发 `Session_End` 事件,可以手动将会话状态设置为超时状态,如下所示:
```
Session.Timeout = 1;
```
这段代码将会话超时时间设置为 1 分钟,这样会话状态会在 1 分钟之内被自动销毁并触发 `Session_End` 事件。
相关问题
C#代码查看HttpContext.Current.Session.Abandon() 清空了哪些
在 C# 代码中,可以通过以下方式查看 HttpContext.Current.Session.Abandon() 方法清空了哪些内容:
```csharp
// 获取 Session 的所有键
var sessionKeys = HttpContext.Current.Session.Keys;
// 在调用 Abandon 方法之前输出 Session 中的所有键和值
foreach (string key in sessionKeys)
{
Console.WriteLine(key + " = " + HttpContext.Current.Session[key]);
}
// 调用 Abandon 方法清空 Session
HttpContext.Current.Session.Abandon();
// 在调用 Abandon 方法之后输出 Session 中的所有键和值
foreach (string key in sessionKeys)
{
Console.WriteLine(key + " = " + HttpContext.Current.Session[key]);
}
```
在上面的示例代码中,我们首先获取了当前会话中的所有键,并遍历输出了它们的值。然后调用 HttpContext.Current.Session.Abandon() 方法清空了当前会话。最后,再次遍历输出会话中的所有键和值,我们可以看到它们的值已经被清空为 null。需要注意的是,在调用 Abandon 方法之后,尝试访问 Session 中的任何键都将会抛出 NullReferenceException 异常。
protected void LinkButton2_Click(object sender, EventArgs e) { Response.Redirect("UserStReg.aspx"); } protected void Button4_Click(object sender, EventArgs e) { Session.Abandon(); Session.Clear(); Session["UserId"] = null; Session["UserName"] = null; Response.Redirect("Default.aspx"); } protected void Button1_Click(object sender, EventArgs e) { Response.Redirect("UserHome.aspx"); } protected void Button2_Click(object sender, EventArgs e) { if (TxtUserName.Text == "" && TxtPassword.Text == "") { Alert.AlertAndRedirect("没有输入账号和密码!", "Default.aspx"); } else { //用户业务逻辑层 BLL.UsersBusiness busi = new BLL.UsersBusiness(); DataSet ds = new DataSet(); //加载列表 ds = busi.GetList("UserName='" + TxtUserName.Text.Trim() + "'and pwd='" + TxtPassword.Text.Trim() + "'"); if (ds != null) { if (ds.Tables[0].Rows.Count > 0) { Session["UserId"] = ds.Tables[0].Rows[0]["id"].ToString(); Session["UserName"] = ds.Tables[0].Rows[0]["UserName"].ToString(); Session["XingMing"] = ds.Tables[0].Rows[0]["XingMing"].ToString(); Session["ZheKou"] = ds.Tables[0].Rows[0]["ZheKou"].ToString(); Response.Redirect("Default.aspx"); } } else { Alert.AlertAndRedirect("账号或者密码不对请重新登陆!", "Default.aspx"); } } } protected void LinkButton1_Click(object sender, EventArgs e) { Response.Redirect("FindPwd.aspx"); }
这段代码是一个ASP.NET的代码,主要实现了一些按钮的点击事件。
1. LinkButton2_Click: 当LinkButton2被点击时,会跳转到UserStReg.aspx页面,即用户注册页面。
2. Button4_Click: 当Button4被点击时,会清空Session中的用户信息,然后跳转到Default.aspx页面。
3. Button1_Click: 当Button1被点击时,会跳转到UserHome.aspx页面,即用户主页。
4. Button2_Click: 当Button2被点击时,会首先判断输入的用户名和密码是否为空,如果为空,则弹出提示框;如果不为空,则通过业务逻辑层(BLL.UsersBusiness)查询数据库判断是否存在该用户。如果存在,则将用户信息存入Session中,然后跳转到Default.aspx页面;如果不存在,则弹出提示框。
5. LinkButton1_Click: 当LinkButton1被点击时,会跳转到FindPwd.aspx页面,即找回密码页面。