1

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

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

“user12345” “注销”

选项2)如果用户退出,以上2个链接将变为:

“登录” “注册”

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

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

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

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

4

2 回答 2

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 对象作为字符串返回:

{"logout":true}

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

于 2012-04-07T04:04:58.443 回答
0

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

我在不使用 AJAX 调用的情况下解决了这个问题。

于 2012-04-09T01:45:44.237 回答