0

我正在尝试在 php 中创建一个 IRC 日志机器人!其中很多已经在工作,但我想用用户创建的密码保护日志!

基本上这个想法是用户输入: !password 和 het 得到一个随机密码!一旦进入门户网站,他需要使用该密码登录,然后他可以看到日志

我确实有密码生成器,并且已经有一个带有会话的登录脚本

登录数据库如下所示:

#| 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['nick'] 需要成为他的昵称(存储在同一行中)

我希望你们都明白我需要什么,因为我的英语不是那么好。请尽可能多地保留此示例中的代码,以便我更容易理解!不需要安全!(当一切都以这种方式工作时,我会解决这个问题)

页面的实时网址:http: //xvilo.com/logs.php

4

3 回答 3

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";
      } 
    } 
} 

?>
于 2013-05-07T06:25:02.923 回答
1

要检查密码,请使用如下查询:

SELECT COUNT(*) matches FROM login_db
WHERE nick = ? AND password = ?

其中占位符替换为登录表单中的用户名和哈希密码。如果返回matches = 1则登录成功,如果返回则登录matches = 0失败。

此外,您的登录表单缺少用户名字段。

于 2013-05-07T05:51:48.607 回答
0

Xvilo,您需要转换用户发送的任何“密码”,使用之前使用的相同功能将其保存在数据库“HndOe34”中,然后您可以比较两者。例如:

...
    $pass_from_user = FUNCTION_USED_BEFORE_TO_CONVERT($pass);

    if( $pass_from_user === $pass_from_db)
    {
...
于 2013-05-07T05:49:55.570 回答