[英]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.