2011-08-24 125 views
1

我正在使用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.

这是我的要求....

回答

3

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

您不应该依靠浏览器来终止会话。用户可以忘记关闭浏览器,或者他可能已禁用JavaScript。相反,请为用户提供关闭会话的途径,并将会话超时设置为适合用户活动的合理值。

+0

我已经更新了我的代码.. – RobinHood

0

你可以触发JavaScript中,像这样:

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

<body onBeforeUnload="loadOut()"> 

您的JavaScript可以执行一个AJAX调用,或什么的。 这也将工作,我想,当用户离开您的网站。

这是你在寻找什么?

+0

感谢大家好,我是C#.net – RobinHood

+0

工作我已经更新了我的代码 – RobinHood

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(); 
} 

?> 
+0

感谢大家好,我是C#.net工作 – RobinHood

+1

小心,疗法在某些场景下anotehr浏览器窗口可能会打开共享会话。在这种情况下,你也可以杀死其他的Windows会话。 – TomTom

+0

我已经更新了我的代码 – RobinHood

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

} 

如果我们输入或粘贴URL,该代码会重定向到登录页面

0

我在为IE,.NET应用程序这样做,当用户点击浏览器直到角落里的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,设置可见=假不工作,因为对象将变得无效。Css noShow是:visibility:hidden;

在site.master.cs

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

上面的代码在页面刷新时被激发......它是如何工作的? – msbyuva