繁体   English   中英

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

[英]Killing session value in Browser Close

我在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。

这是我的要求....

Http协议是无连接协议,因此除非您计划使用websockets,否则只有两种方法可以通过用户的直接请求(即按下注销链接)或会话超时来终止用户会话。

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

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

 }

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

我在我的.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();
}

你可以触发javascript,像这样:

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

<body onBeforeUnload="loadOut()">

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

这是你在寻找什么?

这个怎么样:

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

?>

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM