2011-08-24 320 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