代码之家  ›  专栏  ›  技术社区  ›  Matthew

发送标题到“重定向”整个窗口?

  •  3
  • Matthew  · 技术社区  · 14 年前

    因此,在我的PHP身份验证库中,如果有人未登录,则会将其重定向到主页:

    redirect('home/index');

    问题是我有一些通过Ajax加载内容的模式窗口。如果某个用户以某种方式注销(但仍在“登录”页面上),那么模式将显示登录页面,因为模式被“重定向”到主页。

    如果用户长时间没有执行任何操作(并且已注销),或者如果用户打开多个选项卡并在其中一个选项卡上注销,但在另一个选项卡上尝试打开模式弹出窗口,则可能会发生此问题。

    是否有方法重定向整个窗口?

    7 回复  |  直到 13 年前
        1
  •  1
  •   E Ciotti    13 年前

    两种解决方案:

    1)在主页面设置一个javascript函数,每隔x秒检查一次cookie,如果不存在,则重定向整个页面。

    location.href="login.php"
    

    2)在用Ajax加载的页面中,设置一个javascript代码进行重定向,你不能用PHP来做,因为脚本不知道上下文,只是一个预处理结果的请求。 可以用php在任何地方打印出来的javascript代码(包括正文)

      if (notLogged){
          window.redirect='login.php';
        }
    
        2
  •  0
  •   dekomote    14 年前

    好吧,如果您将HTML发送到模式对话框,并且不想更改它,那么您总是可以检查登录表单是否在响应中。如果窗体存在,则重定向整个窗口。假设您的登录表单ID为“登录表单”,您的Ajax回调将如下所示:

    function(data){
        if($(data).find("#login_form").length>0)
            location.href="/login_url"
        else{
            //handle the ajax response
        }
    }
    
        3
  •  0
  •   Thariama    14 年前

    一个简单的解决方案可以包括 隐藏标记 或者别的 标志的种类 进入 Ajax结果 以查明用户是否仍“登录”。如果他没有那么做 window.location.href="myserver.com/home/"; 在Ajax请求的回调函数中。

        4
  •  0
  •   Curt Hostetter    14 年前

    我现在使用的应用程序在过去也做了同样的事情——解决方案:如果它是Ajax调用的函数,如果它们注销了,只需返回一个简单的“注销”,并在javascript Ajax返回中检查它,然后使用location.href属性重定向用户。

        5
  •  0
  •   ChrisR    14 年前

    另一种方法可能是让授权者对xmlhttprequest做出不同的反应…通过分析 $_SERVER['HTTP_X_REQUESTED_WITH'] 变量。如果可以断定请求是由“xmlhttprequest”发送的,则可以在模式中显示登录表单,而不进行重定向。这样,用户就不会被重定向到另一个页面重新登录,但他可以从打开的对话框中右键登录,然后在离开的地方继续。

    当然,这需要在脚本中进行一些客户端修改来处理loginform submit等…但在可用性方面是最优雅的解决方案。

        6
  •  0
  •   zod    14 年前

    在模式打开之前使用会话。 下次单击或提交时,应进行会话检查,并将其重定向。

        7
  •  -1
  •   numo16    14 年前

    您总是可以使用header函数重定向整个窗口,将用户重定向到您希望的任何页面。

    <?php header('Location: myserver.com/home/'); ?>