c# - 在超时之前执行代码

时间:2017-06-27 23:58:24

标签: c# sql

我想执行一个代码,该代码将在DB中插入类似" Session expire"跟踪用户。但是,我的会话超时位于Web.config

<system.web>
    <compilation debug="true" targetFramework="4.0" />
    <sessionState timeout="20" mode="InProc" />
</system.web>
<defaultDocument>
      <files>
        <add value="Login.aspx" />
      </files>
</defaultDocument>

然后我想执行此代码。

 if (HttpContext.Current.Session["usersId"] == null && HttpContext.Current.Session["usersRole"] == null && HttpContext.Current.Session["usersDivision"] == null && HttpContext.Current.Session["notification"] == null)
  {
      string connstr = ConfigurationManager.ConnectionStrings["dbConn"].ConnectionString;
        SqlConnection conn = new SqlConnection(connstr);
        conn.Open();
        SqlCommand cmdlog = new SqlCommand("INSERT INTO Logs (logs_info,logs_date,users_id) VALUES (@info,@date,@id)", conn);
        cmdlog.Parameters.AddWithValue("@info", "User " +sessionName+ " session timed out.");
        cmdlog.Parameters.AddWithValue("@date", DateTime.Now);
        cmdlog.Parameters.AddWithValue("@id", HttpContext.Current.Session["usersId"].ToString());
        cmdlog.ExecuteNonQuery();
        conn.Close();
        HttpContext.Current.Response.Redirect("../Login.aspx");
}

如何在超时前执行该代码?

1 个答案:

答案 0 :(得分:0)

您可以在Global.asax文件中使用以下事件

forgetDevice

但是,只有在达到会话超时时才会触发此事件。

要访问会话变量,您可以使用void Session_End(Object sender, EventArgs E) { // Do processing here } 代替this.Session

希望它有所帮助。