簡體   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