博客列表 >表单的异步请求及响应数据的处理、后台脚本接收并过滤用户数据后返回请求页面、结合 session 实现用户会话跟踪

表单的异步请求及响应数据的处理、后台脚本接收并过滤用户数据后返回请求页面、结合 session 实现用户会话跟踪

尹辉
尹辉原创
2023年04月13日 08:51:55274浏览

表单的异步请求(fetch)及响应数据的处理

1)登录页面,提交按钮添加 onclick 事件

  1. <!-- button 的 type 属性设置为 button,取消默认提交 -->
  2. <button type="button" onclick="doLogin(this)">提交</button>

2)登陆页面脚本,定义按钮执行函数 doLogin()

函数功能:

  • 获取用户输入数据
  • 验证用户数据(这里仅非空验证)
  • 将用户数据发送给后台脚本(handle.php)同时发起异步请求
  • 根据后台脚本返回的数据,判断用户是否登录成功,并执行对应的操作
  1. async function doLogin(obj) {
  2. // 获取用户输入数据
  3. const email = obj.form.email.value;
  4. const password = obj.form.password.value;
  5. // 非空验证
  6. if (email.length > 0 && password.length > 0) {
  7. // 将用户数据发送给后台脚本(handle.php)同时发起异步请求
  8. const response = await fetch('./lib/user/handle.php', {
  9. method: 'POST',
  10. headers: {
  11. 'Content-Type': 'application/json;charset = utf-8'
  12. },
  13. body: JSON.stringify({email, password})
  14. })
  15. // 解析返回的数据 response返回json格式时,用r.json()打印响应的内容
  16. const result = await response.json();
  17. if (result) {
  18. alert('登录成功');
  19. // 首页跳转
  20. location.href = 'index.php';
  21. } else {
  22. alert('验证失败,请核实信息');
  23. location.href = 'login.php';
  24. }
  25. }
  26. }

后台脚本接收并过滤用户数据后返回请求页面

脚本功能:

  • 接收用户输入的表单数据
  • 与后台存储的用户数据进行比对,判断用户输入是否正确
  • 将比对结果返回给请求页面
  • 如果用户登录成功,将用户名保存到 session : $_SESSION[‘name’]
  1. // 开启 session
  2. session_start();
  3. // 引入用户模拟数据,用于比对用户输入数据
  4. $users = require __DIR__.'/../../data/user.php';
  5. // 1.接收表单数据 不能使用传统的超全局变量$_POST来接收
  6. // json当成文本流原始数据来接收
  7. $json = file_get_contents('php://input');
  8. // 2.$json 并非php所能识别的数据类型 需要将json字符串转成php数组
  9. $user = json_decode($json, true);
  10. // 3.解析用户提交的数据 和数据表里的数据进行匹配
  11. $email = $user['email'];
  12. $salt = 'wwwphpcn23';
  13. $password = md5($user['password'] . $salt);
  14. // 4. 用户过滤(比对用户输入数据)
  15. $result = array_values(array_filter( $users,
  16. function ($user) use ($email, $password) {
  17. return $user['email'] === $email && $user['password'] === $password;
  18. }));
  19. // 5.结果分析,并将结果返回请求页面
  20. // 默认检查不通过
  21. $flag = false;
  22. if (count($result) === 1) {
  23. $flag = true;
  24. $_SESSION['name'] = $result[0]['name'];
  25. }
  26. echo json_encode($flag);

各页面根据 session 中保存的内容实现用户会话跟踪

头部模板 header.php

  1. // 开启 session
  2. session_start();
  3. <nav>
  4. <a href="index.php">首页</a>
  5. <?php foreach ($navs as $v) : extract($v); ?>
  6. <a href="<?= $url ?>"><?= $name ?></a>
  7. <?php endforeach; ?>
  8. <?php if (isset($_SESSION['name'])): ?>
  9. <a href="login.php"><?= $_SESSION['name'] ?></a>
  10. <?php else: ?>
  11. <a href="login.php">登录</a>
  12. <?php endif; ?>
  13. </nav>
声明:本文内容转载自脚本之家,由网友自发贡献,版权归原作者所有,如您发现涉嫌抄袭侵权,请联系admin@php.cn 核实处理。
全部评论
文明上网理性发言,请遵守新闻评论服务协议