JS登录功能实现

2022-08-18 11:07:32

前后端不分离式登录功能

1、准备一个登录页面 login.html

  form 标签, 一个表单标签
     + 有自动提交功能
	 + action: 提交到哪一个地址(哪一个 php 文件)
	 + button 标签对: 等价于 submit 按钮, 点击的时候会自动提交
  input
     + form 表单的自动提交
     + 只会提交有 name 属性的表单
     + name 的值作为 key,表单的 value 作为 value
     + 例子:
        => guoxiang
        => 123456
        => 提交到 login.php 的内容就是 username=guoxiang&password=123456
     问题:用户名和密码会显示在浏览器的地址栏
<form action="./login.php" method="GET"><input type="text" name="username" autocomplete="off"><br><input type="text" name="password" autocomplete="off"><br><input type="text" placeholder="性别"><br><button>登录</button></form>

2.服务器解析提交的数据 login.php

/1. 接收前端发来的内容/PHP 有一个天生的关联型数组叫做 $_GET/ 所有从 地址栏 带过来的参数信息, 都自动存储在里面
  $username= $_GET['username'];// guoxiang
  $password= $_GET['password'];header('content-type: text/html;charset=utf-8;');/2. 使用前端发来的内容去数据库查询
  $link=mysqli_connect('localhost','root','root','gp20');

  $sql="SELECT * FROM `users` WHERE `username`='$username' AND `password`='$password'";
  $res=mysqli_query($link, $sql);/把结果解析完毕, 查看解析完毕的关联型数组的 length
  $data=mysqli_fetch_all($res,MYSQLI_ASSOC);/3. 返回结果给前端, 登录成功, 登录失败if(count($data)){/ 表示有数据, 登录成功/ 暂时使用 php 操作一下浏览器 告诉浏览器, 把你的地址栏写成 home.htmlheader('location: ./home.html');}else{// 表示没有数据, 登录失败
    echo'用户名密码错误!';
    echo'<button><a href="./login.html">跳转</a></button>';}

判断用户有没有登录过

利用cookie和session

login.phpif(count($data)){/ 表示登录成功/ 存储一个简单的信息到 session 空间里面/ 就会有一半密码存储在 cookie 里面了session_start();/ 存储一个信息进去
    $_SESSION['login']=1;
    $_SESSION['username']= $data[0]['username'];header('location: ./index.php');}else{/ 表示登录失败
    echo'用户名密码错误!';}
index.php<?php/ 打开 session 空间/从里面拿到 login 和 username 信息/ 只要有, 证明登陆过 没有, 就没有登录过session_start();/ 逻辑: 判断一下 $_SESSION 里面有没有, 有再获取, 没有直接不获取// $username = $_SESSION['username'];if(isset($_SESSION['username'])){
    $username= $_SESSION['username'];}else{
    $username='亲!请登录';}?>

前后端分离式登录功能

前端业务逻辑
    1. 获取元素
    2. 绑定事件
      => submit 事件
      => button 的点击事件
      => **阻止表单的自动提交**
    3. 获取用户输入的内容
    4. 表单验证
      => 非空验证
      => 格式验证
    5. 发送请求
    6. 根据响应做不同的操作
login.html/1. 获取元素const nameInp= document.querySelector('input[name=username]')const pwdInp= document.querySelector('input[name=password]')// const btn = document.querySelector('button')const form= document.querySelector('form')const h3= document.querySelector('h3')/2. 绑定事件
    form.addEventListener('submit', e=>{
      e= e|| window.event// 阻止默认事件
      e.preventDefault()/3. 获取用户输入的数据const username= nameInp.valueconst password= pwdInp.value/4. 简单的非空验证if(!username||!password)returnalert('完整填写表单')/5. 提交到后端const xhr=newXMLHttpRequest()
      xhr.open('POST','./login.php')
      xhr.onload=function(){// 准备根据后端返回的结果去操作const{ message, code}=JSON.parse(xhr.responseText)if(code===1){// 登录成功
          window.location.href='./index.html'}elseif(code===2){
          h3.style.display='block'}}
      xhr.setRequestHeader('content-type','application/x-www-form-urlencoded')
      xhr.send(`username=${username}&password=${password}`)})
login.php<?php/ 后端的业务逻辑/1. 接收参数, 判断任何一个没有, 都不是正常行为if(!isset($_POST['username'])||!isset($_POST['password'])){

    $arr=array("message"=>"请按照规则携带参数","code"=>0);

    echojson_encode($arr);// 打断代码, 后面的所有代码不再执行了
    exit;}
  $username= $_POST['username'];
  $password= $_POST['password'];/2. 去数据库比对
  $link=mysqli_connect('localhost','root','root','gp20');

  $sql="SELECT * FROM `users` WHERE `username`='$username' AND `password`='$password'";
  $res=mysqli_query($link, $sql);

  $data=mysqli_fetch_all($res,MYSQLI_ASSOC);/3. 判断结果if(count($data)){
    $arr=array("message"=>"登录成功","code"=>1);}else{
    $arr=array("message"=>"登录失败","code"=>2);}// 返回结果
  echojson_encode($arr);?>
  • 作者:qq_36158581
  • 原文链接:https://blog.csdn.net/qq_36158581/article/details/115874843
    更新时间:2022-08-18 11:07:32