我有一个会员网站。每个网页的标题栏将具有以下2个选项,具体取决于用户是否登录:
选项1)如果用户已登录,则它将具有以下2个链接:
“user12345” “登出”
选项2)如果用户注销,则上述2个链接将变为:
“登录” “登记”
该页面包含一些用于检查用户cookie的Javascript代码。如果用户cookie存在,if将显示选项1),否则选项2)。 Javascript没有问题。它正确显示了上述选项。
这是问题所在。我使用服务器端脚本(perl)来执行“注销”功能。该脚本将删除cookie并重新定向回原始页面。我希望该页面将显示选项2),但它没有。它仍然显示选项1)。需要刷新页面以显示选项2)。这是令人困惑的,因为用户点击了注销链接,但当他们返回页面时,他们仍然在那里看到他们的用户名。他们需要刷新Web浏览器才能看到他们已经注销。
选项2)应在单击“注销”链接时显示在页面上。但我根本不知道如何成功完成这项工作。
请提供您的专业知识来解决此问题。
答案 0 :(得分:1)
首先,我建议将问题解决,以便您可以测试与页面重定向分开的注销功能。
修改您的Perl脚本,以便注销不会重定向。
登录,然后点击退出。
使用可让您查看Cookie的Chrome或Firefox扩展程序。验证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调用的情况下修复了问题。