Javascript 在asp.net中如何在会话超时之前触发函数

Javascript 在asp.net中如何在会话超时之前触发函数,javascript,asp.net,ajax,session,Javascript,Asp.net,Ajax,Session,我想调用一个方法来跟踪用户活动的签入和签出。我将会话超时设置为使会话过期,但在会话超时之前,我想存储用户活动。因此,我尝试在javascript中使用ajax调用一个方法,以便在会话到期之前运行该方法。不幸的是,该方法没有运行。下面是我的代码 管理主控计算机系统 protected void Page_Load(object sender, EventArgs e) { Response.Cache.SetCacheability(HttpCac

我想调用一个方法来跟踪用户活动的签入和签出。我将会话超时设置为使会话过期,但在会话超时之前,我想存储用户活动。因此,我尝试在javascript中使用ajax调用一个方法,以便在会话到期之前运行该方法。不幸的是,该方法没有运行。下面是我的代码

管理主控计算机系统

     protected void Page_Load(object sender, EventArgs e)
            {
        Response.Cache.SetCacheability(HttpCacheability.NoCache);
                    if (!this.IsPostBack)
                    {
                        Session["Reset"] = true;
                        Configuration config = WebConfigurationManager.OpenWebConfiguration("~/Web.Config");
                        SessionStateSection section = (SessionStateSection)config.GetSection("system.web/sessionState");
                        int timeout = (int)section.Timeout.TotalMinutes * 1000 * 60;
                        Page.ClientScript.RegisterStartupScript(this.GetType(), "SessionAlert", "SessionExpireAlert(" + timeout + ");", true);
                    }
    }

 [WebMethod]
        public void logout_timeout() //This method i have to run
        {
}
管理硕士

 <script type="text/javascript">
        function SessionExpireAlert(timeout)
        {
            debugger
            var seconds = timeout / 1000;
            document.getElementsByName("secondsIdle").innerHTML = seconds;
            document.getElementsByName("seconds").innerHTML = seconds;
            setInterval(function () {
                seconds--;
                document.getElementById("seconds").innerHTML = seconds;
                document.getElementById("secondsIdle").innerHTML = seconds;
            }, 1000);
            setTimeout(function ()
            {

                //Show Popup before 20 seconds of timeout.
                $.ajax({
                    type: "POST",
                    url: "Admin.Master/logout_timeout",
                    data: "{}",
                    dataType: "json",
                    contentType: "application/json; charset=utf-8",
                    success: OnSuccess,
                    error: OnError
                });
                $find("mpeTimeout").show();
            }, timeout - 20 * 1000);
            setTimeout(function () {
                window.location = "Login.aspx";

                //$.ajax(
                //                  {
                //                      type: "POST",
                //                      contentType: "application/json; charset=utf-8",
                //                      url: "Case.aspx/removeTrans",
                //                      data: "{ 'DelData':'" + transId + "'}",
                //                      success: function (result) { window.location.reload(true); console.log("successful!"); }
                //                  })



            }, timeout);
        };

函数SessionExpireAlert(超时)
{
调试器
var秒=超时/1000;
document.getElementsByName(“secondsIdle”).innerHTML=seconds;
document.getElementsByName(“秒”).innerHTML=seconds;
setInterval(函数(){
秒--;
document.getElementById(“秒”).innerHTML=seconds;
document.getElementById(“secondsIdle”).innerHTML=seconds;
}, 1000);
setTimeout(函数()
{
//在超时20秒前显示弹出窗口。
$.ajax({
类型:“POST”,
url:“管理员主机/注销超时”,
数据:“{}”,
数据类型:“json”,
contentType:“应用程序/json;字符集=utf-8”,
成功:一旦成功,
错误:OnError
});
$find(“mpeTimeout”).show();
},超时-20*1000);
setTimeout(函数(){
window.location=“Login.aspx”;
//$.ajax(
//                  {
//类型:“POST”,
//contentType:“应用程序/json;字符集=utf-8”,
//url:“Case.aspx/removeTrans”,
//数据:“{'DelData':'”+transId+“}”,
//成功:函数(结果){window.location.reload(true);console.log(“成功!”);}
//                  })
},超时);
};

将logout\u timeout函数移动到xxxx.aspx,并调用Ajax URL“xxxx.aspx/logout\u timeout”。

在这种情况下,我在other xxxx.aspx中使用了其他方法,但也没有运行。首先,是否调用了SessionExpireAlert?是的,这被调用了。我怀疑您的js代码格式不正确。除了$ajax调用,你能评论所有代码吗?除了ajax调用,你评论了完整的JavaScript函数。该方法尚未运行。