2014-10-08 202 views
0

目前,我的网站在数据库中有一个包含用户名和密码的表。前端有2个文本框和一个登录按钮。一旦用户填写完这两个字段并单击登录,它将检查用户名和密码是否与数据库相匹配,如果是,请让他们进入并设置会话变量以检查entier站点。这足够安全吗?我如何将其转换为表单身份验证?我不想扔掉我的登录表。如果我要将其转换为表单身份验证,我还可以使用它吗?任何人都可以指点我或告诉我如何做到这一点?由于自定义身份验证以形成身份验证

回答

0

我使用标准的登录是somethig这样的:

的index.html:

<form action="login.php" method="post"> 
      <table width="100%" border="0" style = "border-top: 2px solid #CCC; padding-top: 15px;"> 
       <tr> 
       <td><input type="text" class="text_box" placeholder="Usuario" name="user" id="user"></td> 
       </tr> 
       <tr> 
       <td><input type="password" class="text_box" placeholder="Contraseña" name="pass" id="pass"></td> 
       </tr> 
       <tr> 
       <td> 
        <?php 
        show_message(); 
        ?> 
        <input type="submit" value="Ingresar" class="boton_submit"> 
        </td> 
       </tr> 
      </table> 
     </form> 

,而PHP的...

<?php 
    if(isset($_POST["user"]) && isset($_POST["pass"])){ 
     include('conect_to_database.php'); 

     $user = $_POST["user"]; 
     $pass = $_POST["pass"]; 

     if(!filter_var($_POST["user"], FILTER_VALIDATE_EMAIL)) { 
      //Not a valid email ... sends back to login form 
      header('Location: index.php') ; 
      exit(); 
     } 

     $query = "SELECT id FROM user where user = ? and pass = ? LIMIT 1"; 
     $stmt = $mysqli->prepare($query); 
     $stmt->bind_param("ss", $user, $pass); 
     $stmt->execute(); 
     $stmt->bind_result($id); 

     while ($stmt->fetch()) { 
      //set your session variable 
      header('Location: ../../control_panel.php') ; 
      exit(); 
     } 
     //echo invalid user... sends back to login form 
     header('Location: index.php') ; 
    } 
?> 

我也建议检查特殊用户名和密码都是字符。

此外,你不应该在你的数据库中存储密码。您应该使用特殊算法存储真实密码的哈希值。

+0

是的我明白不把密码存储在数据库中的文本我只想找出它是否安全,而不是表单身份验证?两者有什么不同? – user3731575 2014-10-08 19:26:10