2012-08-27 47 views
0

我目前使用SESSION變量進行重定向。 Hoprfully代碼片段將清楚。使用會話變量跟蹤重定向頁面

addForm.php:

if (!isset($_SESSION['myusername'])){ 
      if (isset($_COOKIE['username'])){ 
       $_SESSION['myusername'] = $_COOKIE['username']; 

      } 
     else{ 
       #using a session var to redirect back to addForm.php 
       $_SESSION['addForm'] = 1; 
       header("location:loginForm.php");  
      } 
} 

LoginSuccess.php

session_start(); 
if (!isset($_COOKIE['username'])){ 

    header("location:loginForm.php"); 
} 
if (isset($_SESSION['addForm'])){ 
    header("location:addForm.php"); 
} 

上述工程(重定向到addForm.php)。我的問題是,這樣做有沒有風險?有沒有更好的方法來做到這一點?我想我正在尋找'最佳實踐'。

+1

和你的問題是? –

+0

對不起,我丟失了隨機頁面刷新的問題位。現在它是固定的。 – greenpool

回答

1

你有一些錯誤:

  1. 有效的標題是header('Location: http://www.example.org/script.php');通知L和完整網址?
  2. 每個header('Location: http://www.example.org/script.php');後,它應該是exit();
  3. 你不能依靠只是$_COOKIE['username'],你需要有從密碼什麼的,我的意思是不是密碼,也許在$_COOKIE也是一個MD5()哈希密碼。而且你應該知道不要太依賴$_COOKIE
  4. LoginSuccess.php你必須在重定向前unset($_SESSION['addForm'])addForm會話仍然會被設置。
+0

感謝您的提示。關於第1點,我可以使用「位置」而不是「位置」,而沒有任何錯誤。任何理由爲什麼這樣? – greenpool

+0

這不適合你的代碼語言,它適用於瀏覽器。瀏覽器接收標題爲'location'。無論編程語言如何,標準都是'Location'作爲頭文件。 –

1

Personnaly,我更喜歡在會話變量中存儲入口當前URI。然後,當我的登錄過程成功時,我使用存儲的URI將用戶重定向到上一頁。

僞碼


    if (!isset($_SESSION['userloginobj'])) { 
     $_SESSION['callbackuri'] = get_current_url_depending_of_your_process(); 
     header('location:' . get_base_url() . 'index.php?do=login'); 
     exit(0); 
    } 
    elseif ('login' == get_param('do')) { 
     // Show the login form 

     if (is_login_successfull()) { 
      $_SESSION['userloginobj'] = "userinfo"; 
      header('location:' . $_SESSION['callbackurl']); 
      exit(0); 
     } 
    } 
    else { 
     // Normal process 
    } 

但是你proccess似乎是一個良好的開端,如果你不使用框架。

+0

謝謝,但是我沒有使用框架。 – greenpool