因此,在我的php身份验证库中,如果有人未登录,则会将其重定向到主页:
redirect('home/index');
问题是我有一些通过ajax加载内容的模态窗口。如果用户以某种方式注销(但仍然在他们“登录”的页面上),则模态显示登录页面,因为模式被“重定向”到主页。
如果用户长时间没有做任何事情(并且已注销),或者如果他们打开多个标签并在其中一个标签上注销但另一方尝试打开模式弹出窗口,则会出现此问题
有没有办法重定向整个窗口?
答案 0 :(得分:1)
两种解决方案:
1)在主页面上设置一个javascript函数,每隔x秒检查一次cookie,如果不存在,则重定向整个页面
location.href="login.php"
2)在用ajax加载的页面中,设置一个javascript代码进行重定向,你不能用PHP做,因为脚本无法知道上下文,只是对请求结果进行预处理。
可以在任何地方使用PHP打印的Javascript代码(包含正文)
if (notLogged){
window.redirect='login.php';
}
答案 1 :(得分:0)
好吧,如果您将HTML发送到模式对话框并且您不想更改它,您可以随时检查登录表单是否在响应中。如果表单在那里,重定向整个窗口。假设你的登录表单id在“login_form”中,你的ajax回调看起来像这样:
function(data){
if($(data).find("#login_form").length>0)
location.href="/login_url"
else{
//handle the ajax response
}
}
答案 2 :(得分:0)
一个简单的解决方案可能是在 Ajax-result 中包含隐藏标记或其他类型的标记,以便找出如果用户仍然“登录”。如果不是,那么在Ajax请求的回调函数中执行类似window.location.href="myserver.com/home/";
的操作。
答案 3 :(得分:0)
我现在使用的应用程序现在做了同样的事情 - 解决方案:如果它是ajax调用的函数,如果它们已经注销,只需回显一个简单的“注销”并在javascript上检查它ajax返回并使用location.href属性重定向用户。
答案 4 :(得分:0)
另一种方法可能是让您的授权人对您的xmlhttprequest采取不同的反应......通过分析$_SERVER['HTTP_X_REQUESTED_WITH']
变量。如果您可以断定请求是由“XMLHttpRequest”发送的,那么您可以在模式中显示登录表单而不进行重定向。这样,用户就不会被重定向到另一个页面再次登录,但是他可以从他打开的对话框中直接登录,并在他离开的地方继续。
这个过程需要在脚本中进行一些客户端修改来处理登录表单提交等...但是就可用性而言是最优雅的解决方案。
答案 5 :(得分:0)
在打开模态之前使用Session。 在每次下一次点击或提交时,都应该进行会话检查,然后重定向。
答案 6 :(得分:-1)
您始终可以使用标题功能重定向整个窗口,将用户重定向到您希望的任何页面。
<?php header('Location: myserver.com/home/'); ?>