我在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。
这是我的要求......
答案 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();
}