处理注销的更好方法

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 注销也将替换该页面

以上是关于处理注销的更好方法的主要内容,如果未能解决你的问题,请参考以下文章

马上重启,关机,注销,批处理应该怎么写?

如何使用推送通知处理注销事件?

如何在 Spring 中处理不成功的注销?

Firebase 云消息传递 - 处理注销

注销处理程序Silex

如何从 closeEvent 处理使用 PyQt4 检测注销/关闭?