簡體   English   中英

注冊后如何自動登錄

[英]How to auto login after registration

如title所述,我要在用戶成功注冊后登錄,並且不希望他們再次輸入用戶名和密碼來登錄。

這是注冊碼

<?php 
  $name = ((isset($_POST['name']))?sanitize($_POST['name']):'');
  $email = ((isset($_POST['email']))?sanitize($_POST['email']):'');
  $password = ((isset($_POST['password']))?sanitize($_POST['password']):'');
  $confirm = ((isset($_POST['confirm']))?sanitize($_POST['confirm']):'');
  $errors = array();
  if($_POST){
    $emailQuery =$db->query("SELECT * FROM users1 WHERE email = '$email'");
    $emailCount = mysqli_num_rows($emailQuery);

        if($emailCount != 0){
          $errors[] = 'That email already exists in our database.';
        }


    $required = array('name', 'email', 'password', 'confirm');
    foreach($required as $f){
      if(empty($_POST[$f])){
        $errors[] = 'You must fill out all fields';
        break;
      }
    }
    if(strlen($password) < 6){
      $errors[] = 'Your password must be atleast 6 characterss';
    }
    if($password != $confirm){
      $errors[] = 'Your password do not match';
    }
    if(!filter_var($email,FILTER_VALIDATE_EMAIL)){
      $errors[] = 'You must enter a valid email';
    }
    if(!empty($errors)){
      echo display_errors($errors);
    }else{
      //add user to database
    $hashed = password_hash($password,PASSWORD_DEFAULT);
      $db->query("INSERT INTO users1 (full_name,email,password) values('$name', '$email','$hashed')");

  }
?> 

這是我的登錄結構的樣子

<?php
 if ($_POST) {
    //form validation
    if (empty($_POST['email']) || empty($_POST['password'])) {
        $errors[] = 'You must provide email and password.';
    }

    //Validate email
    if(!filter_var($email,FILTER_VALIDATE_EMAIL)){
        $errors[] = 'You must enter a valid email';
    }

    //Password is more than 6 characters
    if(strlen($password) < 6) {
        $errors[] = 'Password must be at least 6 characters';
    }

    // check if email exits in the database
    $query = $db->query("SELECT * FROM users WHERE email = '$email'");
    $user = mysqli_fetch_assoc($query);
    $usercount = mysqli_num_rows($query);
    if($usercount < 1){
        $errors[] = 'That email does not exist in our database';
    }

    if (!password_verify($password, $user['password'])) {
        $errors[] = 'The password does not match our records. Please try again.';
    }

    //check for errors
    if(!empty($errors)) {
        echo display_errors($errors);
    }else {
        $user_id = $user['id'];
      login($user_id);
    }
 }
?>

這是登錄功能

function login($user_id){
    $_SESSION['SBUser'] = $user_id;
    global $db;
    $date = date("y-m-d h:i:s");
    $db->query("UPDATE users SET last_login = '$date' WHERE id = '$user_id'");
    $_SESSION['success_flash'] = 'You are now logged in!';
    header('location: index.php');
}

指示用戶已登錄的唯一操作是設置$_SESSION['SBUser'] = $user_id;

因此,在您的注冊腳本中也要這樣做。

<?php 
// new code
session_start();

$name = ((isset($_POST['name']))?sanitize($_POST['name']):'');
$email = ((isset($_POST['email']))?sanitize($_POST['email']):'');
$password = ((isset($_POST['password']))?sanitize($_POST['password']):'');
$confirm = ((isset($_POST['confirm']))?sanitize($_POST['confirm']):'');
$errors = array();
if($_POST){
    $emailQuery =$db->query("SELECT * FROM users1 WHERE email = '$email'");
    $emailCount = mysqli_num_rows($emailQuery);

    if($emailCount != 0){
        $errors[] = 'That email already exists in our database.';
    }

    $required = array('name', 'email', 'password', 'confirm');
    foreach($required as $f){
        if(empty($_POST[$f])){
            $errors[] = 'You must fill out all fields';
            break;
        }
    }
    if(strlen($password) < 6){
        $errors[] = 'Your password must be atleast 6 characterss';
    }
    if($password != $confirm){
        $errors[] = 'Your password do not match';
    }
    if(!filter_var($email,FILTER_VALIDATE_EMAIL)){
        $errors[] = 'You must enter a valid email';
    }
    if(!empty($errors)){
        echo display_errors($errors);
    }else{
        //add user to database
        $hashed = password_hash($password,PASSWORD_DEFAULT);
        $db->query("INSERT INTO users1 
                          (full_name,email,password) 
                    values('$name', '$email','$hashed')");

        // new code
        $_SESSION['SBUser'] = $db->insert_id;
    }
?> 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM