Javascript 如何使用默认页面设置新会话
我正在为一个客户改进一个实时网站,但遇到了一个问题。当前,当用户忘记密码时,他们会收到一封带有加密密码的电子邮件。然后,他们可以使用它登录该站点。除非用户转到更改密码页面(changepassword.php),否则密码将保持永久性 如果用户使用的是加密密码,而不是默认的成员页面(subjects.php),那么客户机希望用户直接进入“更改密码”页面 对于MYSQL users表,我创建了一个新列(temp_password),它只包含1或NULL的值。当收到忘记密码请求时,列的值将更新为1。因此,只有当用户电子邮件和密码与temp_password中的值1匹配时,新会话(将用户定向到changepassword.php)才会启动 我遇到的问题是,我无法理解默认会话是如何工作的,或者我需要如何设置它。我知道我需要对下面两个PHP源文件中的部分进行更改(Javascript 如何使用默认页面设置新会话,javascript,php,html,mysql,Javascript,Php,Html,Mysql,我正在为一个客户改进一个实时网站,但遇到了一个问题。当前,当用户忘记密码时,他们会收到一封带有加密密码的电子邮件。然后,他们可以使用它登录该站点。除非用户转到更改密码页面(changepassword.php),否则密码将保持永久性 如果用户使用的是加密密码,而不是默认的成员页面(subjects.php),那么客户机希望用户直接进入“更改密码”页面 对于MYSQL users表,我创建了一个新列(temp_password),它只包含1或NULL的值。当收到忘记密码请求时,列的值将更新为1。因
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, "/");
}
}
您可以在包含临时密码的电子邮件中提供更改密码页面的链接,而不是在数据库中保存一个值,然后在后台执行所有工作
控制数据库中密码的过期日期。所以,数据库中没有新字段,并且新代码有限。等等,您是说密码是直接存储在数据库中的吗?这是一个很大的禁忌。密码必须加密,最好使用像bcryptNo这样的强大算法,密码是加密的。你创建一个唯一的散列。将其存储在用户表中。在您发送的电子邮件中,您包括一个链接,例如
new_password.php?h=
,通过url中提供的哈希,您知道哪个用户想要重置密码。谢谢您能告诉我如何在MySQL中实现这一点吗?我正在尝试密码\u expired来设置过期时间,但它不起作用。“update users set password_expired='1',password='reset_password',其中email_id='$email_id'.”很抱歉,由于这里的回复太晚,我已经离开了一段时间。只需在用户表或密码表中创建一个字段,或者在数据库中存储了用于说明日期/时间字段的密码的位置,将其称为pw_creationDate,另一个字段称为pw_expirationDate。在代码中,您可以检查当前日期与到期日期,或者在创建日期进行计算。例如,如果创建日期早于90天,则标记它并重定向到密码/用户页面。或者发送电子邮件。。。