我正在尝试在php中创建一个IRC日志机器人!很多它已经工作,但我想用用户创建的密码保护日志!
基本上这个想法是用户输入:!密码和het获取随机密码! 一旦他需要使用该密码登录的webportal,然后他就可以看到日志的
我确实有密码生成器,并且已经有一个会话
的登录脚本登录数据库如下所示:
#| id | nick | Password
------------------------
1| 1 | xvilo | HndOe34
2| 2 | user | ET4vfd4
3| 3 | boooh | WQ688WY
登录脚本如下:
<?php
$pass = $_POST['pass'];
if(isset($pass) )
{
if( empty($pass) ) {
die ("ERROR: Please enter password!");
}
if( $pass == "somepassword")
{
// Authentication successful - Set session
session_start();
$_SESSION['auth'] = 1;
$_SESSION['nick'] = $nick_from_database;
setcookie("username", $_POST['name'], time()+(84600*30));
header('Location: '.$_SERVER['PHP_SELF'].'');
}
else {
echo "ERROR: Incorrect username or password!";
}
}
// If no submission, display login form
else {
?>
<html>
<head></head>
<body>
<center>
<form method="post" action="<?php echo $_SERVER['PHP_SELF']; ?>">
<p />
Password: <input type="password" name="pass">
<p />
<input type="submit" name="submit" value="Log In">
</center>
</body>
</html>
<?php
}
?>
你可以看到它非常基本! 在此代码之前我已经连接到数据库了! 现在我不知道如何检查给定的密码(来自输入字段)是否与数据库中的密码之一相同! 如果是的话,那就给他: $ _SESSION ['auth'] = 1; 所以他登录了 $ _SESSION [ '缺口'] 需要成为他的昵称(存储在同一行)
我希望你们都明白我的需要,因为我的英语不是那么好。 请在此示例中保留代码,以便我更容易理解! 安全不需要! (当这一切都以这种方式工作时,我会解决这个问题)
页面的实时网址:http://xvilo.com/logs.php
答案 0 :(得分:3)
<?php
// Inialize session
session_start();
unset($_SESSION['username']);
if (isset($_POST['logout'])){
session_start();
session_destroy();
}
// Check, if user is already login
if (isset($_SESSION['username'])) {
header('Location: location.php');
}
if(isset($_POST['Submit'])){
$msg="";
if(empty($_POST['username'])){
$msg="Please enter your username. ";
}
if(empty($_POST['password'])){
$msg .="Please enter your password. ";
}
if(empty($msg)){
include('include/databaseconnection.php');
$un = $_POST['username']; // enter username opt.
$_SESSION['username'] = $nick_from_database;
setcookie("username", $_POST['username']);
$sql = "SELECT username, password FROM `table` WHERE username ='$un'";
$sql .= "AND password='".md5($_POST['password'])."'";
if(!$res = mysql_query($sql)){
$msg.=mysql_error();
}else{
//user exists in system, set the session variables
if (mysql_num_rows($res)==1) {
while($row = mysql_fetch_assoc($res)){
// the user name and password match,
$_SESSION['username'] = $row['username'];
$_SESSION['password'] = $_POST['password'];
}
}
else {
$msg = "Your login details did not match";
}
}
}
?>
答案 1 :(得分:1)
要检查密码,请使用以下查询:
SELECT COUNT(*) matches FROM login_db
WHERE nick = ? AND password = ?
使用登录表单中的用户名和哈希密码替换占位符。
如果返回matches = 1
,则登录成功,如果matches = 0
则失败。
此外,您的登录表单缺少用户名字段。
答案 2 :(得分:0)
Xvilo,您需要转换用户使用之前使用的相同FUNCTION发送的“somepassword”,将其保存在数据库“HndOe34”上,然后您可以比较两者。 e.g:
...
$pass_from_user = FUNCTION_USED_BEFORE_TO_CONVERT($pass);
if( $pass_from_user === $pass_from_db)
{
...