2012-10-04 66 views
0

我有一個網頁,我們稱之爲main.php,它顯示了足球場的圖像和一些球員在球場上分佈的球員。但是,該頁面使用list.php作爲加載玩家列表的右側框架。從框架內重定向網站PHP

會發生什麼事是,當上了場(main.php)玩家用戶點擊,讓我們的守門員(GK),從世界的GK列表寬球隊將加載的圖像上說右列表fram(list.php)。這是通過使用ajax。

到目前爲止,我們很好。

目前的情況是,當從外地球員會話超時,用戶點擊,在右邊的列表中不加載,而是球員名單從列表中消失以及一條消息說「請登錄時顯示」右側邊框上(list.php的)

目的是,當會話超時我想整個網站重定向到主網頁的index.php

的問題是,我已經把重定向代碼放在代碼之前負責顯示消息「請登錄」。但是發生的是,重定向發生在框架內,所以我最終有main.php顯示字段,list.php顯示主頁面!

下面是我添加的代碼。

$user_id = NSession::get('user_id'); 
if (!isset($user_id)) 
{ 
     NSession::removeall();   
     General::Redirect('index.php'); 
} 

他們正在使用Smarty。順便說一下,我在main.php的頂部添加了相同的代碼,現在如果用戶在未登錄的情況下嘗試訪問main.php,它會將其重定向到主頁面,所以代碼工作正常!

n.b.該項目不是我的,它屬於我工作的公司。 我不知道哪個代碼正在檢查會話,所有我知道的是,如果用戶在會話超時後點擊字段中的播放器, 「請登錄」消息將顯示在框架中。

回答

2

我猜重定向本質上和使用header()函數相同。不可能使用php重定向指定目標,因爲它是服務器端 - 指定目標是客戶端。

您需要打印像這樣的屏幕:

<script type="text/javascript">window.open('index.php','_parent');</script> 

這將用戶重定向到索引中。

0

使用用於此目的的框架...嗯...所以... 80ish

不管怎麼說,框架很可能在這種情況下命名。這意味着你可以解決它們,但也必須解決它們。只需在「當前」框架中加載一個url就是這麼做的,這就是爲什麼你的方法無法工作。

如果你真的必須使用基於框架的方法,那麼你將不得不使用JavaScript來處理所有已知的幀並重定向它們。

0

也許你可以使用一些JavaScript您的框架內,像這樣:

<script type="text/javascript"> 

    window.top.location = 'YourPage.html'; 

</script> 

希望這有助於

+0

使用的了。同樣的結果。它從框架內加載。 – MJoraid

0

的問題是,雖然我在main.php會話過期。因此,請求的所有後續Ajax都將失敗,因爲所有請求都需要會話處於活動狀態。

問題在於從IFrame發送的Ajax請求(IFrame在main.php中,並指向通過Ajax調用的list.php)由於會話過期而失敗。

所以我通過添加另外兩個會話檢查來解決這個問題,一個用main.php,list.php用PHP(檢查會話,如果有的話,重定向)。在主容器main.php中,我通過JS檢查會話,檢查會話的間隔Ajax請求,如果會話已結束,然後使用JS重定向。

PHP:

$user_id = NSession::get('user_id'); 
if (isset($_POST["checklogin"]))//check loging 
{ 
    die(isset($user_id) ? "true" : "false"); 
} 
if (!isset($user_id) || $user_id == "") 
{ 
    NSession::removeall(); 
    General::Redirect('login.php'); 
} 

的JavaScript:

jQuery(document).ready(function($) { 

    $(window).focus(function() { 
     checkSession(); 
    }); 
}); 


function checkSession() 
{ 
    $.ajax({ 
     type: "POST", 
     data: {"checklogin": "cl"}, 
     url: "list_players.php", 
     success: function(result) { 
      if (result === "false") 
      { 
       if (FIELD.showMessage === false) 
       { 
        FIELD.showMessage = true; 
        alert("Your session has been closed\nYou will be redirected to login page now. "); 
        window.location.href = ("login.php");//incase user clicks OK     
       } 
      } 
     } 
    }); 
}