处理注销的更好方法
Posted
技术标签:
【中文标题】处理注销的更好方法【英文标题】:Better way to handle logout 【发布时间】:2012-10-28 11:54:37 【问题描述】:我有一个自定义注销页面。当用户单击注销时,将到达此页面(并且注销状态保存在数据库中)。没有登录机制。如果用户尝试在新窗口中查看,则允许他查看该页面,并且注销状态将更改为已登录。
一旦登出,当用户点击返回按钮(从登出页面)时,它不应该允许用户查看上一页。
类似地:当用户访问一个页面时,时间会被存储。当他空闲 20 分钟并尝试操作时,他将被重定向到会话超时。他应该无法在单击后退按钮时查看上一页。
目前在每个页面中,我正在检查数据库状态并在状态已注销时再次重定向到已注销页面。但它会导致页面首先加载,然后在 javascript 中进行验证,然后重定向。有没有更好的方法来处理这个问题?
注意:我根据Clear browser history 中的评论将其作为一个新问题发布
$.ajax(
type: "POST",
url: "LogOut.aspx/GetActiveIndicatorStatus",
data: '"empID": "' + empID + '"',
contentType: "application/json; charset=utf-8",
dataType: "json",
success: navigateBasedOnStatus
);
//Helper Function
function navigateBasedOnStatus(result)
if (result.hasOwnProperty("d"))
result = result.d
//alert($.trim(result));
if ($.trim(result) == "LoggedOUT")
window.location.href("LogOut.aspx");
else
contentHolderDiv.css("display", "block");
参考:
-
Clear browser history
Dynamically add href on <a>
【问题讨论】:
我不明白这个机制。没有显式登录,但您可以注销?并且用户在访问新站点时会自动重新登录?从任何角度来看,这听起来都非常不正统且容易出错……更不用说 Javascript 也不应该参与处理登录/退出。 @deceze 当用户访问页面时,时间被存储。当他空闲 20 分钟并尝试操作时,他将被重定向到会话超时。他应该无法在单击后退按钮时查看上一页。 【参考方案1】:场景 1:不使用 Ajax:
如果您在用户可能再也看不到的页面上,
window.location.replace("LogOut.aspx/GetActiveIndicatorStatus?empID="+empID)
将用您返回的任何内容替换您所在的页面。
场景 2:在结果中替换:
if ($.trim(result) == "LoggedOUT")
window.location.replace("LogOut.aspx");
else
contentHolderDiv.css("display", "block");
【讨论】:
假设用户首先到达page1,然后到达page2。用户单击从 page2 注销。考虑我在注销点击时使用了 REPLCAE。用户仍然可以返回到第 1 页;虽然不是第2页。有什么解决办法吗? 从 page1 使用 location.replace("page2...") 那么历史中没有 page1 并且从 page2 注销也将替换该页面以上是关于处理注销的更好方法的主要内容,如果未能解决你的问题,请参考以下文章