2009-04-09 26 views
0

我在網站的每個頁面都有登錄表單,所以用戶可以從任何地方登錄。我有一個login.php文件,我從表單中引用它(使用'action')。PHP登錄系統問題...發送頁面到頁面的錯誤

我使用$_SERVER['HTTP_REFERER']將用戶重定向到他成功登錄或登出時登錄的同一頁面。

但是,如果登錄時出現問題,我如何向他嘗試登錄的同一頁發送錯誤?我曾嘗試使用發送的$_GET錯誤,像這樣:

// process the script only if the form has been submitted 
if (array_key_exists('login', $_POST)) { 
    // Login code goes here... 

    // If there was a problem, destroy the session and prepare error message 
    else { 
    $_SESSION = array(); 
    session_destroy(); 
    header('Location: '.$_SERVER['HTTP_REFERER'].'?error'); 
    exit; 
} 

但問題是,很多在網站的網頁都是這樣details.php?mid=0172495。他們已經從$_GET方法recove信息和出於安全原因我不能使用另一個$_GET方法...

所以,我怎麼能通過錯誤? 謝謝...

+0

使用$ _SERVER ['HTTP_REFERER']是一個壞主意,因爲客戶端可以阻止引用。考慮使用$ _SERVER ['PHP_SELF']來代替。 – Powerlord 2009-04-09 17:07:12

+0

PHP_SELF會給出登錄腳本的地址,他試圖找出它們來自哪裏。通常,正確的解決方案包括將$ _GET變量中的地址發送到登錄腳本,以避免引用阻止問題。 – 2009-04-09 17:12:51

回答

0

要添加到什麼乍得樺木說...

在您重定向你的登錄腳本,請檢查字符的HTTP_REFERER值「?」。如果存在,請向HTTP_REFERER附加'&錯誤'並重定向到該錯誤。否則將'?error'附加到HTTP_REFERER並重定向到那個。

+0

我該怎麼做?我真的很陌生... – Jonathan 2009-04-09 17:17:18

0

我不知道究竟你是「出於安全原因,我不能用另一種方法$_GET」的意思,但在有一些已經在查詢字符串的情況下,您只需將另一變量,而不是取代它。

也就是說,如果地址是一樣details.php?mid=0172495,你應該將它們發送到details.php?mid=0172495&error,而如果只是details.php,你把他們送到details.php?error

+0

如何將$ _GET變量中的地址發送到登錄腳本? – Jonathan 2009-04-09 17:18:50

2

由於您已經在使用會話,因此在銷燬會話後爲什麼不用$ _SESSION ['error']或類似的設置創建一個新會話?或者,根本不要刪除會話,而是設置可以立即在其他頁面中檢查的錯誤?

0

另一種做你需要的方法是將你的login.php文件包含在每個擁有登錄表單的頁面中,然後發佈到同一頁面。所以你根本不需要任何重定向。

這可能不是一個好的可擴展和可維護的解決方案,但它很簡單。這一切都取決於你正在寫什麼樣的應用程序。但是你說你是PHP的新手,所以你可以像這樣開始。你可以隨時看到...