2013-05-16 127 views
1

我已經adpopted一些代碼來創建一個登錄,checklogin,成功的登錄,失敗的登錄和註銷頁面。 checklogin頁面主要檢查從登錄發佈的用戶名和密碼。如果這些都是正確的,最終會登錄成功登錄頁面。不過,我想在成功的登錄頁面上說'Welcome John',但不知道如何從會話中獲取用戶名,以便我可以在此基礎上查詢以撤回登錄的用戶名。該checklogin頁:會話用戶ID?

<?php require_once('Connections/Connection1.php'); ?> 

<?php 
//$host="localhost"; // Host name 
//$username=""; // Mysql username 
//$password=""; // Mysql password 
//$db_name=""; // Database name 
$tbl_name="users"; // Table name 



// Connect to server and select databse. 
//mysql_connect("$host", "$username", "$password")or die("cannot connect"); 
//mysql_select_db("$db_name")or die("cannot select DB"); 
mysql_select_db($database_Connection1, $Connection1); 

// username and password sent from form 
$myusername=$_POST['myusername']; 
$mypassword=md5($_POST['mypassword']); 

// To protect MySQL injection (more detail about MySQL injection) 
$myusername = stripslashes($myusername); 
$mypassword = stripslashes($mypassword); 
$myusername = mysql_real_escape_string($myusername); 
$mypassword = mysql_real_escape_string($mypassword); 

$sql="SELECT * FROM $tbl_name WHERE userid='$myusername' and password='$mypassword'"; 
$result=mysql_query($sql); 



// Mysql_num_row is counting table row 
$count=mysql_num_rows($result); 

// If result matched $myusername and $mypassword, table row must be 1 row 

if($count==1){ 

// Register $myusername, $mypassword and redirect to file "login_success.php" 
session_register("myusername"); 
session_register("mypassword"); 
header("location:main.php"); 
} 
else { 
header("location:login_failed.php"); 
//echo "Wrong Username or Password"; 
} 
?> 

然後我成功的登錄頁面上,我怎麼迴應的用戶名?或者至少在查詢中引用它,然後撤回附加信息,如名稱?

非常感謝!

+0

看到這些教程,它可以幫助你http://thenewboston.org/watch.php?cat=11&number=136 – Ligth

+0

我相信你需要'session_start();'在所有頁面中,然後使用'if(isset ... $ _ POST)'和echo'$ myusername'。沿着這些線的東西。 –

+1

如果我的用戶名是「'或1 = 1;從用戶刪除會發生什麼; - 」? –

回答

1

改變了代碼比特,這是更安全..

<?php 
session_start(); 
// Sanitize $_POST['myusername'] and $_POST['mypassword'] before loading into session variables to protect from MySQL injection 
$_SESSION["myusername"]=!empty($_POST['myusername'])?mysql_real_escape_string(stripslashes($_POST['myusername'])):""; 
$_SESSION["mypassword"]=!empty($_POST['mypassword'])?mysql_real_escape_string(stripslashes($_POST['mypassword'])):""; 

// Load database variables, connect to server and select a database 
$host="localhost"; // Host name 
$username=""; // Mysql username 
$password=""; // Mysql password 
$db_name=""; // Database name 
$tbl_name=""; // Table name 
mysql_connect($host, $username, $password)or die("Cannot Connect for Reason:".mysql_error()); 
mysql_select_db("$db_name")or die("Cannot Select DB for Reason:".mysql_error()); 

// Run query 
$result=mysql_query("SELECT username FROM $tbl_name WHERE username='".$_SESSION["myusername"]."' AND password='".$_SESSION["mypassword"]."'"); 

// Check for return of single record and direct to login_success.php 
if(mysql_num_rows($result)==1){header("location:login_success.php");} 
else{ 
// On login falier, unset session variables if not needed and redirect 
unset($_SESSION["myusername"]); // Optional if return value not needed or wanted 
unset($_SESSION["mypassword"]); // Optional if return value not needed or wanted 
header('refresh: 5; url=./login_fail.php'); 
die("Wrong Username or Password. Redirecting..."); // To prevent evil people manipulating the page, kill the script using die. 
} 
?> 

爲響應另一頁面上的用戶:回聲$ _SESSION [ '名爲myUsername'];

+0

嗨,感謝Marijke的回覆,但是您的代碼現在不允許我登錄,並且我有一種感覺,這是由於使用MD5在我原來的代碼中使用:$ mypassword = md5($ _ POST ['mypassword']); – mdemetri2

1

當我需要這樣做時,我通常使用php的$_SESSION數組並在其中設置快速查找信息,例如可能在多個頁面上顯示的名稱。

$_SESSION['username'] = $username; 
$_SESSION['firstname'] = $firstname; 
$_SESSION['lastname'] = $lastname; 
$_SESSION['user_id'] = $id; 

這使我訪問,在PHP頁面開始呼籲session_start()任何網頁上的所有這些變量。

在旁註 - 使用MD5哈希密碼IS NOT SECURE!瞭解如何使用crypt()函數與鹽。這將是良好的做法,並使您的數據庫更安全。不幸的是MD5並不比純文本更安全,因爲人們可以輕鬆訪問彩虹表和ocl-hashcat等程序。

請考慮使用PDO或mysqli進行數據庫調用。 mysql_函數已棄用。

0

你有兩個選擇......

要麼你可以main.php網頁上檢索它作爲$_SESSION['myusername'];

或者,你可以用它傳遞給main.php爲header("location:main.php?username=".$myusername);

然後在main.php上,你可以檢索它作爲$_GET['username'];