如何注销显示正确的状态?

时间:2012-04-07 03:50:20

标签: javascript

我有一个会员网站。每个网页的标题栏将具有以下2个选项,具体取决于用户是否登录:

选项1)如果用户已登录,则它将具有以下2个链接:

“user12345” “登出”

选项2)如果用户注销,则上述2个链接将变为:

“登录” “登记”

该页面包含一些用于检查用户cookie的Javascript代码。如果用户cookie存在,if将显示选项1),否则选项2)。 Javascript没有问题。它正确显示了上述选项。

这是问题所在。我使用服务器端脚本(perl)来执行“注销”功能。该脚本将删除cookie并重新定向回原始页面。我希望该页面将显示选项2),但它没有。它仍然显示选项1)。需要刷新页面以显示选项2)。这是令人困惑的,因为用户点击了注销链接,但当他们返回页面时,他们仍然在那里看到他们的用户名。他们需要刷新Web浏览器才能看到他们已经注销。

选项2)应在单击“注销”链接时显示在页面上。但我根本不知道如何成功完成这项工作。

请提供您的专业知识来解决此问题。

2 个答案:

答案 0 :(得分:1)

首先,我建议将问题解决,以便您可以测试与页面重定向分开的注销功能。

  • 修改您的Perl脚本,以便注销不会重定向。

  • 登录,然后点击退出。

  • 使用可让您查看Cookie的Chrome或Firefox扩展程序。验证cookie已被删除。

如果一切都在这里检查,我建议您重新连接重定向并重复上述步骤:

  • 当您的页面重定向并且您没有看到登录时|注册按钮,检查cookie是否被删除,如果cookie出现,那么重定向后代码中可能会有一些缓存。

作为替代方案,您可以使用document.referrer捕获JavaScript代码中的注销URL,并使用它来确定是否应显示登录名|注册按钮。例如:

if(document.referrer = "/logout" || /* existing check of cookie goes here */) {
    // show login | register
} else {
    // show username, etc.
}

如果可能,最佳解决方案可用性是将您的注销URL转换为AJAX调用,这样您就不需要重新加载页面了。这将比上述解决方案更好,因为您可以检查响应对象以确定注销操作是否成功。如果是这样,您可以使用正确的文本动态替换标题栏。

使用jQuery.ajax的AJAX示例如下:

$.ajax({ 
    url: '/logout',
    success: function(data) {
        if(data.logout == true) {
            // user is logged out
        }
    },
    error: function(jqXHR, textStatus, errorThrown) {
        /* problem with logout */
    }
});

如果成功,您的perl注销脚本将需要将JSON对象作为String返回:

{"logout":true}

还有其他方法可以进行AJAX调用和向服务器传输数据,您可以在Stackoverflow上找到这些搜索“AJAX”的示例。

答案 1 :(得分:0)

  

Blockquote首先,我建议将问题解决,以便您可以测试与页面重定向分开的注销功能......

我在没有使用AJAX调用的情况下修复了问题。