我有一个在asp.net上登录选项的网站.
如果我在两个浏览器选项卡中打开网站,并使用相同的用户帐户登录,并在两个选项卡中导航到主屏幕,现在我已从一个选项卡登录,并再次登录同一个选项卡,之后点击第二个选项卡,
如果请求是从第二个选项卡,我需要导航到应用程序登录屏幕.我该怎么办?
在我的主页上,我添加了逻辑
if (Session["UserID"] == null) { Response.Redirect("Login.aspx"); }
但是问题是当我从第一个选项卡注销并再次登录时,在第二个选项卡刷新之后,Session [“UserID”]不为空,因此它将保留在那里.但是我需要重定向登录页面.我可以实现这个??
解决方法
我可以建议您使用JavaScript和Ajax Post进行重定向.我用它自己,找到可靠,满足需要.我仍然认为可能会有更好的方法来做到这一点.但是现在这样做会做你的工作.
下面的代码检查选项卡焦点/焦点丢失,并调用模糊和焦点上的Csharp代码.
<script type="text/javascript"> //divClearMessages $(window).on("blur focus",function (e) { var prevType = $(this).data("prevType"); if (prevType != e.type) { // script for Please Come Back switch (e.type) { case "blur": // Use this if you want to check something after user changes tab case "focus": $.ajax({ type: "POST",url: "main.aspx/CheckIfSessionIsNull",// Call here the Csharp method which checks the session and redirect user contentType: "application/json; charset=utf-8",dataType: "json",success: function (retValue) { // Do something with the return value from.Net method } }); break; } } $(this).data("prevType",e.type); }) </script>
在代码后添加这个方法:(记得添加[WebMethod]属性)
[System.Web.Services.WebMethod] public static void CheckIfSessionIsNull() { if (System.Web.HttpContext.Current.Session["UserId"] == null) HttpContext.Current.Response.Redirect("Login.aspx"); }