2011-09-02 130 views
0

在我的索引頁我有這個代碼鏈接到我的login.php頁:PHP重定向循環

 <?php  
    if(isset($_SESSION['username'])) { 
    echo "<div id='logout'><a href='logout.php'>Logout (".$_SESSION['username'].")</a></div>"; 
    } else { 
    echo "<div id='login'><a href='login.php'>Login (Regular)</a></div>"; 
    }  
    ?> 

在login.php中的網頁我有

<?php 
include('check.php'); 

$ref = getenv('HTTP_REFERER'); 

if (isset($ref)) { 
    header("Location: " . $ref); 
    exit; 
} else { 
    header("Location: index.php"); 
    exit; 
} 
?> 

check.php是登錄表單的代碼並檢查用戶級別以確保他們可以訪問該頁面。我被告知我需要添加一個檢查來查看引用是否是login.php,否則它將進入一個無限循環,我當然會得到「這個網頁有一個重定向循環」。然而,我不知道如何做到這一點,我找不到任何有關如何解決它的信息。任何人都知道快速解決方案

+1

壞代碼壞壞代碼非常糟糕的代碼HTTP_REFERER是沒有你想要依靠它可以很容易操縱,甚至沒有被一些瀏覽器設置...如果任何東西使用會話來檢查的東西 – Breezer

回答

0

你應該能夠只是做

if (isset($_SERVER['HTTP_REFERER']) && end(explode('/',$_SERVER['HTTP_REFERER'])) != 'login.php') { 
    header("Location: " . $_SERVER['HTTP_REFERER']); 
    exit; 
} else { 
    header("Location: index.php"); 
    exit; 
} 

注意,這是一個簡化的代碼 - 你可能需要比這要聰明一點。

+0

是啊,有致命錯誤:調用if行上未定義的函數。 – Alex

+1

我更新了代碼。但是,您應該真正瞭解代碼提供,而不是一味地複製它。我們樂意幫助別人,但不喜歡爲他們做工。 –

+0

:)它的工作。謝謝。是的,我試圖學習PHP,但我無法弄清楚這一點。我會盡力做到更好。 – Alex