Javascript 如何使用默认页面设置新会话

Javascript 如何使用默认页面设置新会话,javascript,php,html,mysql,Javascript,Php,Html,Mysql,我正在为一个客户改进一个实时网站,但遇到了一个问题。当前,当用户忘记密码时,他们会收到一封带有加密密码的电子邮件。然后,他们可以使用它登录该站点。除非用户转到更改密码页面(changepassword.php),否则密码将保持永久性 如果用户使用的是加密密码,而不是默认的成员页面(subjects.php),那么客户机希望用户直接进入“更改密码”页面 对于MYSQL users表,我创建了一个新列(temp_password),它只包含1或NULL的值。当收到忘记密码请求时,列的值将更新为1。因

我正在为一个客户改进一个实时网站,但遇到了一个问题。当前,当用户忘记密码时,他们会收到一封带有加密密码的电子邮件。然后,他们可以使用它登录该站点。除非用户转到更改密码页面(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, "/");
    }    
}

您可以在包含临时密码的电子邮件中提供更改密码页面的链接,而不是在数据库中保存一个值,然后在后台执行所有工作


控制数据库中密码的过期日期。所以,数据库中没有新字段,并且新代码有限。

等等,您是说密码是直接存储在数据库中的吗?这是一个很大的禁忌。密码必须加密,最好使用像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天,则标记它并重定向到密码/用户页面。或者发送电子邮件。。。