繁体   English   中英

如何在PHP / MySQL中验证用户?

[英]How do I authenticate a user in PHP / MySQL?

最近我学会了如何正确地为数据库添加用户名和密码。 我的数据库是usersys,存储用户信息的表称为userdb。 该表有两列 - 用户名(主要),密码。

注册表格运行良好,正确地将用户输入输入到数据库中,并检查用户的用户名是否已经在数据库中。

话虽如此,我问是否有人可以帮助我创建一个登录脚本。 到目前为止,这就是我所拥有的:

$username = $_POST['username'];
$password = $_POST['password'];
$displayname = $_POST['username'];
$displayname = strtolower($displayname);
$displayname = ucfirst($displayname);           
echo "Your username: " . $displayname . "<br />";

mysql_connect("localhost", "root", "******") or die(mysql_error());
echo "Connected to MySQL<br />";

mysql_select_db("usersys") or die(mysql_error());
echo "Connected to Database <br />";

$lcusername = strtolower($username);
$esclcusername = mysql_real_escape_string($lcusername);
$escpassword = mysql_real_escape_string($password);

$result = mysql_query("SELECT * FROM userdb WHERE username='$esclcusername' AND     password='$escpassword'") or die(mysql_error());
$row = mysql_fetch_array( $result );
$validateUser = $row['username'];
$validatePass = $row['password'];

POST数据来自之前的登录页面。 我希望此脚本检查表(userdb)并找到用户从上一个表单输入的用户名的行,并验证输入的密码是否与userdb表中该行中设置的用户名密码相匹配。

我还想要一些方法来检查输入的用户名是否存在,告诉用户如果在表中找不到输入的用户名,则输入的用户名不存在。

这不是这个问题的直接答案,而是一个好的增值。 在存储到数据库之前,您应该使用MYSQL SHA1函数来加密密码。

$user = $_POST['userid'];
$pwd = $_POST['password'];
$insert_sql = "INSERT into USER(userid, password) VALUES($user, SHA1($pwd))";

$select_sql = "SELECT * FROM USER WHERE userid=$user AND password=SHA1($pwd))";

您可以使用会话。 会话是全局变量,在设置时,在浏览网站时与用户保持联系。

由于您正在学习PHP,请在官方网站上试用本教程

但是你在理论上会做的是当用户名和密码匹配时,你设置一个会话变量

$_SESSION["auth"] = true;
$_SESSION["user_id"] = $row["user_id"];

然后检查用户是否经过身份验证。

一种方法(免责声明:不一定是最佳实践):

$result = mysql_query("SELECT id FROM userdb WHERE username='$esclcusername' AND  password='$escpassword'") or die(mysql_error());
$row = mysql_fetch_array( $result );
$id = (int)$row['id'];
if($id > 0) {
    //log in the user
    session_start();
    $_SESSION['userId'] = $id;
    $_SESSION['username'] = $displayname;
}

...以及需要身份验证的页面:

session_start();
if(!isset($_SESSION['userId'])) {
    die('You need to be logged in!!!');
} else {
    echo 'Welcome ' . $_SESSION['username'];
}

阅读有关PHP 会话的更多信息

我喜欢在任何登录POST中使用$_SESSIONMYSQL Checks。 这应该有助于开始一些事情。

$username = mysql_real_escape_string($_POST[username]);
$password = strip_tags($_POST[password]);
$password = sha1($password);

if(isset($username) && isset($password) && !empty($username) && !empty($password))
{
$sql = mysql_query("SELECT * FROM users_column WHERE username = '$username' AND password = '$password'");

//Check the number of users against database
//with the given criteria.  We're looking for 1 so 
//adding > 0 (greater than zero does the trick). 
$num_rows = mysql_num_rows($sql);
if($num_rows > 0){

//Lets grab and create a variable from the DB to register
//the user's session with.
$gid = mysql_query("SELECT * FROM users_column WHERE username = '$username' AND password = '$password'");
$row = mysql_fetch_assoc($gid);
$uid = $row[userid];

// This is where we register the session.
$_SESSION[valid_user] = $uid;

//Send the user to the member page.  The userid is what the 
//session include runs against.
header('Location: memberpage.php?userid='.$userid);
}

//If it doesn't check out -- throw an error.
else
{
echo 'Invalid Login Information';
}
}

注意:您需要使用session_start()启动页面文件,并创建一个单独的会话检查包括使用session_start()说明然后您的进度,例如if($_SESSION[valid_user] != $userid)执行某些操作。

我同意这个想法,如果在验证用户时使用SESSION变量。

验证用户的简便方法如下

//connect the mysql_db
$mysql_connect()
$mysql_select_db() 

//reading from mysql table
$res="SELECT * FROM table WHERE name=$username AND password=$password";
$val=mysql_query($res);

//authentication
$count=mysql_num_rows($val);
if($count==1)
//authenticate the user
else
through an error

您可以使用select语句从MySQL中检索指定用户名的密码。 如果您有一个空结果集,那么表中没有用户名。

如果您需要在多个php页面中对用户进行身份验证,则可以选择使用会话( http://www.php.net/manual/en/function.session-start.php )。

另外,我认为你应该考虑安全性,即防止SQL注入:

$variable = mysql_real_escape_string($_POST['variable'])

并避免“死”(处理错误并从脚本返回用户友好的消息)。

我还想到不在您的数据库中存储密码。 使用MD5或SHA1进行单向散列是在数据库级别添加安全层的一种方法。

有关详细信息,请参阅http://php.net/md5http://php.net/sha1

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM