2015-09-24 64 views
1

我创建了一个包含电子邮件ID /用户名,密码和记住我复选框的登录页面。如果我第一次检查记住我复选框,它工作正常。如果我尝试通过其他电子邮件地址或密码登录并取消勾选记住我的复选框,则会使用之前的电子邮件ID和密码登录。例如:我用[email protected]电子邮件ID登录并选择记住我复选框,然后登录工作正常。之后,我再次登录与另一个电子邮件ID假设[email protected]一个untick记住我然后它通过以前的电子邮件ID是[email protected]登录我。记住我使用cookie的功能不允许通过其他登录信息登录php

我不明白为什么会发生这种情况。

这里是我的代码:

HTML:

<div class="row form-row"> 
      <div class="col-md-12"><div class="input-with-icon right">          
       <input type="text" placeholder="<?php echo _('Email Id/Username'); ?>" class="form-control" title="<?php echo _('Enter your Email Id/Username'); ?>" name="email_id" value="<?php 
       if (isset($_COOKIE['email_id'])) { 
       echo $_COOKIE['email_id']; 
       } 
       ?>"/> 
      </div> 
      </div> 
     </div> 

     <div class="row form-row"> 
      <div class="col-md-12"> 
      <div class="input-with-icon right">          

       <input name="password" type="password" placeholder="<?php echo _('Password'); ?>" class="form-control" id="password" title="<?php echo _('Enter your password'); ?>" value="<?php 
       if (isset($_COOKIE['password'])) { 
       echo $_COOKIE['password']; 
       } 
       ?>"/> 
      </div> 
      </div> 
     </div> 
     <br/> 
     <div class="row"> 
      <div class="col-md-6 Heading-text"> 
       <div class="checkbox2"> 
        <label><input type="checkbox" name="remember" <?php echo isset($_COOKIE['remember_me']) ? "checked='checked'" : "";?> id="remember"><span style="color:black;"><?php echo _('Remember Me'); ?></span></label> 
       </div> 
      </div> 
     </div>   
     <br/> 
     <div class="input-group center-block text-right"> 
      <button class="btn btn-info btn-cons center-block center-text " type="submit" name="user_login"><?php echo _('Login'); ?></button>     
     </div> 

这是我的PHP代码:

if(isset($_REQUEST['user_login']) 
{ 
    $data = $_REQUEST; 
    $email_id = $data['email_id']; 

$password = $data['password']; 


$sql = "SELECT userid,username FROM users WHERE password = '" . $password."' AND (email_id = '" . $email_id . "' OR username = '".mysqli_real_escape_string($this->getConnection(),$email_id)."')"; 
if ($this->checkRecordExists($sql)) { 
    $result = $this->getRecords($sql); 

      if (isset($data['remember']) && $data['remember'] == 'on') 
      { 
       /* 
       * Set Cookie from here for one hour 
       */ 
       setcookie("email_id", $data['email_id'], time() + (3600 * 24 * 30)); 
       setcookie("password", $data['password'], time() + (3600 * 24 * 30)); /* expire in 1 hour */ 
       setcookie("remember_me", 1, time() + (3600 * 24 * 30)); 
      } else 
      { 
       /** 
       * Following code will unset the cookie 
       * it set cookie 1 sec back to current Unix time 
       * so that it will invalid 
       */ 
       setcookie("email_id", $data['email_id'], time()-1); 
       setcookie("password", $data['password'], time()-1); 
       setcookie("remember_me", 1, time()-1); 
      } 

      $_SESSION['user_info']['username'] = stripcslashes(urldecode($result[0]['username'])); 
      $_SESSION['user_info']['userid'] = $result[0]['userid']; 


    } 
} 

请帮助我在哪里,我错了。

回答

0

我找到了修复程序。问题是因为我设置cookie变量名称与输入控件名称相同,当我提交我的表单cookie值覆盖输入控件值。

这里是固定的代码:

if (isset($data['remember']) && $data['remember'] == 'on') 
     { 
      /* 
      * Set Cookie from here for one hour 
      */ 
      setcookie("user_email_id", $data['email_id'], time() + (3600 * 24 * 30)); 
      setcookie("user_password", $data['password'], time() + (3600 * 24 * 30)); /* expire in 1 hour */ 
      setcookie("user_remember_me", 1, time() + (3600 * 24 * 30)); 
     } else 
     { 
      /** 
      * Following code will unset the cookie 
      * it set cookie 1 sec back to current Unix time 
      * so that it will invalid 
      */ 
      setcookie("user_email_id", $data['email_id'], time()-1); 
      setcookie("user_password", $data['password'], time()-1); 
      setcookie("user_remember_me", 1, time()-1); 
     }