会话用户ID?

问题描述:

我已经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;从用户删除会发生什么; - ”? –

改变了代码比特,这是更安全..

<?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

当我需要这样做时,我通常使用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_函数已弃用。

你有两个选择......

要么你可以main.php网页上检索它作为$_SESSION['myusername'];

或者,你可以用它传递给main.php为header("location:main.php?username=".$myusername);

然后在main.php上,你可以检索它作为$_GET['username'];