在浏览器关闭中杀死会话值

时间:2011-08-24 10:19:00

标签: c# javascript

我在C#.Net工作。我想在浏览器关闭时终止会话值。 (即)在我的申请中,我想显示在线访客数量。如果用户单击注销按钮意味着,它可以正常工作。而不是如果他关闭浏览器,会话值不会被清除。

如果浏览器关闭,则应该终止会话值....

我的Global.ascx代码......

void Application_Start(object sender, EventArgs e)
{
    // Code that runs on application startup      
    Application["OnlineUsers"] = 0;
}

void Application_End(object sender, EventArgs e)
{
    //  Code that runs on application shutdown
}

void Application_Error(object sender, EventArgs e)
{
    // Code that runs when an unhandled error occurs
}

void Session_Start(object sender, EventArgs e)
{
    Application.Lock();
    Application["OnlineUsers"] = (int)Application["OnlineUsers"] + 1;
    Application.UnLock();
}

void Session_End(object sender, EventArgs e)
{
    Application.Lock();
    Application["OnlineUsers"] = (int)Application["OnlineUsers"] - 1;
    Application.UnLock();
}

我的Home.aspx代码......

 Visitors online: <%= Application["OnlineUsers"].ToString() %>

如果我在IE中运行我的应用程序,在线计数将为1.如果我在Firefox中运行,则在线计数应增加到2.如果我关闭Firefox浏览器,则IE中的计数应更改为1。

这是我的要求......

5 个答案:

答案 0 :(得分:3)

Http协议是无连接的,所以除非你打算使用websockets,否则杀死用户会话的唯一两种方法应该是用户的直接请求(即按下注销链接)或会话超时

您不应该依赖浏览器来终止会话。用户可能忘记关闭浏览器,或者他可能禁用了javascript。相反,为用户提供关闭会话的方法,并将会话超时设置为根据用户活动调整的合理值。

答案 1 :(得分:1)

if (!Session.IsNewSession && Request.UrlReferrer == null)
{

 }

如果我们输入或粘贴网址,此代码将重定向到登录页面

答案 2 :(得分:0)

您可以触发javascript,如下所示:

<SCRIPT language="JavaScript">
<!--
function loadOut()
{
    window.location="http://www.yoursite.com/loadout.php?sid=235346317";
}
//-->
</SCRIPT>

<body onBeforeUnload="loadOut()">

你的javascript可以执行AJAX调用,或者其他什么。 我认为,当用户离开您的网站时,这也会有用。

这是你在寻找什么?

答案 3 :(得分:0)

这个怎么样:

<body onunload="doUnload()">

那么javascript就像是:

function doUnload()
{
   $.post("unset_session.php", { action: "unset" },
         function(data) {
         // Callback if wanted
    });
}

然后在你的php中,只是取消设置会话数据,或者销毁会话

<?php
if ($_POST['action'] == 'unset')
{
     // Unset or Destroy the Session
     session_destroy();
}

?>

答案 4 :(得分:0)

我在我的.net应用程序中为IE做了这个,当用户点击浏览器右上角X按钮时,我想强制用户注销。希望有所帮助。

在母版页中:

 <script type="text/javascript">
    window.onbeforeunload = function (e) {
        //alert("Killing the session on the server!!");
        if ((window.event.clientX < 0) || (window.event.clientY < 0)) {
            document.getElementById('<%= FORCE_LOGOUT_BTN.ClientID %>').click();
        }
    } 
</script>

在.net site.master页面中:

<asp:Button ID="FORCE_LOGOUT_BTN" runat="server" CssClass="noShow"OnClick="ForceLogOut" Width="10px" />

必须使用CssClass,设置Visible = false不起作用,因为object将变为null。 Css noShow是:visibility:hidden;

在site.master.cs

public void ForceLogOut(object sender, EventArgs e)
{
    FormsAuthentication.SignOut(); // since I use Form authentication
    Session.Abandon();
}