繁体   English   中英

如果未设置$ _SESSION,则在ajax调用后重定向到登录

[英]Redirect to login after ajax call if $_SESSION not set

我在每个页面上都有一个“检查会话”页面,我希望设置$ _SESSION。 这意味着'check session'脚本也包含在ajax / php页面上。

例如

<?php
require_once globals.php
require_once session.php
?>

<html>
   ...
   <select id="test">
     <option>...

   <script type="text/javascript">
     $('#text').change(function(){
        $.ajax({
             ...
             success: function(result){
                              alert(result);
                      }
             error: ??
       )}
     });
   </script>
<html>

AJAX PHP

<?php
require_once globals.php
require_once session.php

if(isset($_GET['test'])){
      ...
};
?>

我的session.php(不适用于AJAX调用):

<?php
session_start();
ob_start();

if(!$_SESSION['username']){
    header("Location: http://www.mysite.com/login.php");
    die();
}
?>

如果我只在正常加载页面时没有设置$ _SESSION,那么这个脚本会将我重定向到login.php,但是在AJAX调用的情况下,JS AJAX函数会返回错误,但是我无法将用户重定向到login.php

我尝试过以下方法:

在JS中:

error: function(XMLHttpRequest, textStatus, errorThrown) {
           if(XMLHttpRequest.status === 401){
               document.location.reload(true);
           }
        },

在session.php中

header("Location: http://www.mysite.com/login.php", true, 401);

这将向JS返回一个401代码,并且JS重新加载当前页面,再次调用session.php,现在通常应该重定向到login.php。

但事实并非如此:即使我在没有设置$ _SESSION的情况下正常加载页面,我也会得到一个空白页面。 脚本die()但不重定向。

如何使用适用于普通和AJAX请求的解决方案来解决这个问题?

谢谢

您无法从AJAX页面重定向用户,另一方面,您可以从中返回一个值,指示您应该重定向它们,然后在AJAX调用的返回部分执行此操作。

改进:

我建议在你的AJAX页面中这样做:

<?php
require_once globals.php    

if(!isset($_SESSION['username')) {
   echo 'redirectUser';
   exit;
}
if(isset($_GET['test'])){
      ...
};
?>

然后在你的AJAX调用中:

 $('#text').change(function(){
    $.ajax({
         ...
         success: function(result){
                         if(result === 'redirectUser') {
                              window.location.href = 'login.php' //or wherever
                         }else {
                             //success
                         }
                  }
         error: ??
    )}
 });

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM