我有一个网站,我想将我的数据库中的用户状态设置为0(离线)当用户想要退出网站时,问题是我尝试了Page_Unload方法但是不起作用我发现了一些Javascript代码哪个有效但这个Javascript代码在你想要离开网站时显示通知,在这个代码中我想调用一个ASP.NET方法来改变数据库中的数据但是不起作用。提前谢谢!
// Javascript code
window.onbeforeunload = confirmExit;
function confirmExit() {
PageMethods.OnlineOut();
}
//This is on my Master Page
<script type="text/javascript" src='<%= ResolveClientUrl("~/JavaScript.js") %>'></script>
<asp:ScriptManager ID="ScriptManager1" runat="server" EnablePageMethods="true">
</asp:ScriptManager>
//This is on my Content Page.cs
[WebMethod]
public void OnlineOut()
{
SqlConnection conexiune = new SqlConnection(ConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString);
SqlCommand SetareOnline = new SqlCommand("Update [dbo].[Table] Set Online=0 Where(UserName=@UserName)", conexiune);
SetareOnline.Parameters.AddWithValue("@UserName", Session["Login"].ToString());
conexiune.Open();
SetareOnline.ExecuteNonQuery();
conexiune.Close();
}
答案 0 :(得分:1)
你说你试过Page_Unload
但它没有用;你试过它意味着你还没有读过页面生命周期,在MSDN中有清楚的记录。 unload
事件的功能来自该链接:
在页面完全呈现,发送到客户端并准备好被丢弃之后调用Unload。此时,将卸载响应和请求等页面属性,并执行任何清理。
对于您要调用的功能,您需要使用JavaScript中的AJAX进行调查,并处理window.onbeforeunload
事件(请参阅this StackOverflow question以获得全面的答案)。
也就是说,这仍然不能保证工作 - 仍然可以在不触发该呼叫的情况下退出浏览器,并且用户将被保留为“活动”。
更可靠的解决方案是实现以预定间隔(例如,每十秒或每分钟)运行的“心跳”,并呼叫Web服务说“是的,我还在这里”。然后,您记录上次触发心跳的时间,如果您未在设定时间(例如2分钟)内收到呼叫,则将用户计为离线。有关此问题的建议,请参阅this question。