pdo用户登录操作以及setcookie跟session会话跟踪的使用场景,未写登录注册退出操作
控制分发器/请求分发器
代码撸的有点多,复制昨天的代码有点乱
下面这个是控制器分发器,也叫作请求分发器,就是当前端用户发送过来请求时,对前端用户返回的信息,一般是以数组的方式返回,下面代码引用了一个函数的封装文件,老师好像叫做模块,就是把需要后端pdo处理的文件封装到一个函数中,通过参数的传入到函数方法中,pdo在函数的方法中使用前端返回来过来的值.
会话跟踪
1:setcookie
使用setcookie进行会话跟踪时,如果不设置时间,cookie是由浏览器维护,如果设置时间,是由服务器硬盘维护
写法setcookie('参数名', '参数值', 时间);
setcookie('username', '张三', time() + 3600);
2:session
session 直接使用超全局$_SESSION给他的下标赋值,写法$_SESSION['参数'] = '值';
结果赋值给了参数
使用session时需要服务器的php环境开启session会话,使用session_start();
一般服务器是开启的$_SESSION['username'] = '张三';
<?php
//会话跟踪
// 使用setcookie进行会话跟踪时,如果不设置时间,cookie是由浏览器维护,如果设置时间,是由服务器硬盘维护
// 写法setcookie('参数名', '参数值', 时间);
// setcookie('username', '张三', time() + 3600);
//session 直接使用超全局$_SESSION给他的下标赋值,写法$_SESSION['参数'] = '值'; 结果赋值给了参数
//使用session时需要服务器的php环境开启session会话,使用session_start();一般服务器是开启的
// $_SESSION['username'] = '张三';
// 链接数据库
require('1123common.php');
//后端接收一下前端返回过来的参数
// isset检测变量是否已设置
// 其中uname和pwd均为前端传过来的数据
$userName = isset($_POST['uname']) ? $_POST['uname'] : null;
$passw = isset($_POST['pwd']) ? $_POST['pwd'] : null;
// 通过前端接收过来的type参数,get的方式,值为type后缀,一般为登录,注册,退出等操作
// 通过strtolower将大小写转为小写
$type = strtolower($_GET['type']);
$ppassw = md5($passw);
// var_dump($userName, $passw, $type);
//请求分发器
// 注册 登录 退出登录均使用请求分发器
switch ($type) {
// 值为login就是登录操作
case 'login':
//在1123common.php封装了一个函数 checkName($userName, $passw)验证账号密码是否正确
// 通过返回值是true跟false来判断是否登录成功
$res = checkName($userName, $passw);
// 给前端返回一个json数组,status值为1,msg值为登录成功,320将字符转为汉语
if ($res) {
echo json_encode(['status' => 1, 'msg' => '登录成功'], 320);
} else {
echo json_encode(['status' => 2, 'msg' => '登录失败'], 320);
};
break;
// // 退出操作
// case 'tc':
// # code...
// break;
// // 注册操作
// case 'zc':
// # code...
// break;
}
封装的查询数据库用户登录及塞入session会话操作
当前文件中require(‘1122shujukupdo.php’);引入了昨天的pdo作业文件,pdo作业文件前面还有一个数据库配置文件哦
这个相当于模型文件,处理后端接收到的前端文件的数据库操作文件.也就是增删改查的pdo操作,封装到一个函数中,当其他任意一个页面需要此函数时,只需要引入即可,而且在当用户登录成功时,给用户记录一个session会话,便于用户后期在其他页面的操作,也就是用户的标识符号吧
<?php
session_start();
// 模型文件 model
// 连接数据库通过引入的文件pdo
require('1122shujukupdo.php');
// 封装一个函数方法来执行后面的操作
function checkName($userName, $passw)
{
// 超全局函数引入pdo
global $pdo;
$sql = "SELECT * FROM `user` WHERE `user`= ? AND `password`= ? ";
$login = $pdo->prepare($sql);
$ress = $login->execute([$userName, md5($passw)]);
if ($ress) {
$ress = $login->fetch(PDO::FETCH_ASSOC);
if ($ress) {
$_SESSION['username'] = $ress['user'];
return true;
} else {
return false;
}
}
};
这是前端用户的操作文件,登录,注销,更改信息等
用户登录页面代码:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<title>瓜子二手车登录</title>
<!-- Tell the browser to be responsive to screen width -->
<meta name="viewport" content="width=device-width, initial-scale=1">
<!-- Theme style -->
<link rel="stylesheet" href="/public/static/css/adminlte.min.css">
</head>
<style>
</style>
<body class="hold-transition login-page">
<div class="login-box">
<div class="login-logo">
<a href="../../index2.html"><b>瓜子</b>二手车登录</a>
</div>
<!-- /.login-logo -->
<div class="card">
<div class="card-body login-card-body">
<p class="login-box-msg">请输入账户和密码</p>
<form role="form" id="quickForm">
<div class="card-body">
<div class="form-group">
<label for="uname">账户</label>
<input type="text" name="uname" class="form-control" id="uname" placeholder="输入账户" autofocus>
</div>
<div class="form-group">
<label for="pwd">密码</label>
<input type="password" name="pwd" class="form-control" id="pwd" placeholder="输入密码">
</div>
</div>
<!-- /.card-body -->
<div class="card-footer">
<button type="submit" class=" form-control btn btn-primary">登录</button>
</div>
<a href="4-reg.php" class="login-box-msg">没有账号去注册?</a>
</form>
</div>
<!-- /.login-card-body -->
</div>
</div>
<!-- /.login-box -->
<!-- jQuery -->
<script src="/public/static/js/jquery.min.js"></script>
<!-- jquery-validation -->
<script src="/public/static/js/jquery.form.min.js"></script>
<script src="/public/static/js/jquery.validate.min.js"></script>
<script type="text/javascript">
$(document).ready(function() {
$.validator.setDefaults({
submitHandler: function(form) {
$(form).ajaxSubmit({
url: '1123kongzhi.php?type=login',
dataType: null,
type: 'POST',
success: function(res) {
let res1 = JSON.parse(res);
console.log(res1.status);
if (res1.status == 1) {
alert('登录成功');
window.location.href = "1123index.php";
} else {
alert('用户名或密码错误,请检查');
}
},
error: function() {
alert('系统出错啦,请稍后重试');
}
})
}
});
// 对表单的校验
$('#quickForm').validate({
rules: {
uname: {
required: true,
rangelength: [2, 10]
},
pwd: {
required: true,
minlength: 5
}
},
messages: {
uname: {
required: "账户不能为空",
rangelength: '用户名必须2-10字符'
},
pwd: {
required: "密码不能为空",
minlength: "密码至少5个字符"
}
},
errorElement: 'span',
errorPlacement: function(error, element) {
error.addClass('invalid-feedback');
element.closest('.form-group').append(error);
},
highlight: function(element, errorClass, validClass) {
$(element).addClass('is-invalid');
},
unhighlight: function(element, errorClass, validClass) {
$(element).removeClass('is-invalid');
}
});
});
</script>
</body>
</html>
登录后的页面以及通过session超全局变量输出当前的用户名操作
可以比喻为用户登录网站后的其他任意操作,比如改密码,发文章,删评论的页面 ,是页面,并不是数据库的增删改查操作
<?php
session_start()
?>
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
<h1>欢迎您,<?php echo $_SESSION['username'] ?></h1>
</body>
</html>
上一篇: c语言strlen用法详解
下一篇: 分享PHP扫码登录原理及实现方法