2010-05-21 59 views
1

傳遞參數我有3個文件:輸入用戶名和密碼時通過頭在PHP

  • login.html
  • login_check.php
  • welcome.php

login.html並點擊提交按鈕login_check.php根據$_POST['username']和某些SQL曲線檢查用戶名條目是否在數據庫中紅黴素。現在我已經把下面的代碼在login_check.php

login_check.php底部:

header('Location:welcome.php') 

但我想從login_check.php通過$_POST['username']welcome.php,這樣我可以利用$_POST['username']在我的歡迎頁面。有什麼辦法可以通過像上述案例一樣的論點?

回答

10

使用session取而代之的是,因爲無論您登錄哪個頁面的歡迎頁面,您都會在歡迎頁面上每次顯示用戶名。

您可以設置類似login_check頁面上的會話:

session_start(); // this should be on top of login_check file 

// this goes just before redirect line 
$_SESSION['username'] = $_POST['username']; 

現在的歡迎頁面上,可以顯示用戶名,如:

session_start(); // this should be on top of welcome page. 
echo `Welcome ` . $_SESSION['username']; 
0

這可以使用QUERY_STRING完成(我確信你之前已經看到它 - 這些?和&在地址欄中),但是你不應該這樣做,因爲它只是不安全。

A session是一般在登錄和授權後存儲用戶名的常用方法。

+0

是的,不這樣做,這樣一來,使用$ _SESSION超全球。 – 2010-05-21 07:49:14

0

會議應用於會話數據 - 不適用於與特定頁面轉換相關的數據。但是,記錄用戶已經過身份驗證的事實以及他們身份驗證的用戶名是會話數據。

因此,儘管您不應該使用會話數據將login.php中的信息傳遞給login_check.php,但在login_check.php中,如果身份驗證成功,那麼您應該在會話中存儲經過身份驗證的用戶名。

雖然如上校說彈片,你可以這樣做:

header('Location:welcome.php?username=' . urlencode($_POST['username'])); 

這是微不足道的規避 - 你只需要輸入用戶名的welcome.php管理=到瀏覽器打破了安全性?

如果仍然不清楚,請考慮用戶同時打開兩個瀏覽器窗口,瀏覽網站不同部分(即使用相同會話數據)的情況。如果兩個瀏覽器在寫入會話的同時提交數據,並且您不確定結果,那麼您可能不應將數據保留在會話中。

HTH

C.

+0

這將僅顯示第一次來自login_check頁面的用戶名,但這不是他正在尋找的內容。 – Sarfraz 2010-05-21 08:11:49

-1

使用報頭(www.xxx.com?action= '')將沒有存儲它作爲會話轉移的唯一途徑。

4

「使用header(wwww.xxx.com?action='')將沒有把它作爲一個會話轉移的唯一途徑」

將足以