我正在为客户改进一个实时网站,但却遇到了一个要求。目前,当用户忘记密码时,他们会收到一封带有加密密码的电子邮件。然后他们可以使用它登录网站。除非用户转到更改密码页面(changepassword.php),否则密码将保持永久密码。
客户想要的是如果用户使用加密密码而不是默认成员页面(subjects.php),则会立即将用户定向到更改密码页面。
对于MYSQL users表,我创建了一个新列(temp_password),它只能保存值1或NULL。收到忘记密码请求时,列的值将更新为1。因此,只有在temp_password中将用户电子邮件和密码与值1匹配时,才会启动新会话(将用户引导至changepassword.php)。
我遇到的问题是我无法理解默认会话的工作方式或我需要如何设置它。我知道我需要对下面两个PHP源文件(user.class.php
和logincheck.php
)中的部分进行更改。
我将不胜感激任何想法/帮助。
user.class.php
//Check entered login and password. Called From : index.php
function logincheck($dataarray)
{
$email_id = $dataarray['email_id'];
$password = $dataarray['password'];
$query = "select id, email_id, password, phone, user_type, active ";
$query .= "from users ";
$query .= "where email_id= '".$email_id."' and password = '".$password."' ";
$rs = $this->conn->query($query) or die("SQL ERROR ".$this->conn->error); //returns single row
$row = $rs->fetch_array() ;
if((trim($row['email_id']) == $email_id) && (trim($row['password']) == $password))
{
$this->retmsg['error'] = false;
//used to set in session
$this->retmsg['user_id'] = $row['id'] ;
$this->retmsg['email_id'] = $row['email_id'] ;
}
else
{
$this->retmsg['error'] = true;
$this->retmsg['msg'] = 'Invalid Login or Password';
}
return($this->retmsg) ;
}
logincheck.php
//Used to check login user name and password, called from index.php
if($identifier == 'logincheck')
{
$user = new user($appcon) ;
$email_id = trim($data[1]) ;
$password_text = trim($data[2]) ;
$remember = $data[3] ;
//store request variables in local variables
$userarray = array() ;
$userarray['email_id'] = trim($data[1]) ;
$userarray['password'] = trim(md5($data[2])) ;
$userarray['password_text'] = trim($data[2]) ;
$userarray['remember'] = $data[3] ;
$retarr = $user->logincheck($userarray) ;
if(!isset($_SESSION['USER_ID']))
{
$_SESSION['USER_ID'] = $retarr['user_id'] ;
$_SESSION['EMAIL_ID'] = $retarr['email_id'] ;
//$_SESSION['USER_TYPE'] = $retarr['user_type'] ;
//$_SESSION['ACTIVE'] = $retarr['active'] ;
}
if(!isset($_SESSION['REDIRECT_TO']))
$_SESSION['REDIRECT_TO'] = 'subjects.php' ;
$retarr['redirect_to'] = $_SESSION['REDIRECT_TO'];
//if remember me checked set cookie for 100 days
if($remember=='remember'){
setcookie("cookname", $email_id, time()+60*60*24*100, "/");
setcookie("cookpass", $password_text, time()+60*60*24*100, "/");
}
else{
setcookie("cookname", '', time()-60*60*24*100, "/");
setcookie("cookpass", '', time()-60*60*24*100, "/");
}
}
答案 0 :(得分:0)
不是在数据库中保存值,然后在幕后完成所有工作,您可以在具有临时密码的电子邮件中提供更改密码页面的链接。
控制数据库中密码的到期日期。因此,数据库中没有新字段和有限的新代码。