会话控制—session与cookie学习
首页效果图:
首页样式
* {
margin: 0;
padding: 0;
}
nav {
height: 40px;
background-color: deepskyblue;
display: flex;
justify-content: space-between;
padding: 0 20px;
align-items: center;
}
nav > a {
color: white;
text-decoration: none;
padding: 0 5px;
font-weight: 560;
padding-bottom: 2px;
}
/* nav > a:last-of-type {
margin-left: auto;
} */
nav > a:hover {
border-bottom: 3px solid #a1f8da;
color: rgb(241, 187, 170);
}
session设置与验证
1、要开启session会话
2、判断GET方式(地址栏)传过来的action(login、logout、register),执行相应的操作
3、判断email是否已经存在,进行查重处理
<?php
//开启会话
session_start();
//查询用户表中的数据
$pdo=new PDO('mysql:host=localhost;dbname=php11edu','root','root');
$stmt=$pdo->prepare('select * from `users`');
$stmt->execute();
$users=$stmt->fetchAll(PDO::FETCH_ASSOC);
//处理用户登录与注册
$action=$_GET['action'];
switch(strtolower($action)){
//登录
case 'login':
//判断请求是否合法
if ($_SERVER['REQUEST_METHOD']==='POST'){
//获取需要验证的数据
$email=$_POST['email'];
// sha1()函数加密40位.a后面是数字1.
$password=sha1($_POST['password']);
$results=array_filter($users,function($user) use($email,$password){
return $user['email']===$email && $user['password']===$password;
});
// $results是一个二维数组
// print_r($results);
// die;
if (count($results)===1){
// array_pop(array),返回数组最后一个元素的值
$_SESSION['user']=serialize(array_pop($results));
exit('<script>alert("验证通过!");location.href="index.php";</script>');
}else {
exit ('<script>alert("邮箱或密码错误,或者还没有注册帐号!");location.href="login.php";</script>');
}
} else {
die('请求类型错误!');
}
break;
//退出
case 'logout':
if (isset($_SESSION['user'])){
session_destroy();
exit ('<script>alert("退出成功!");location.assign("index.php");</script>');
}
break;
//注册
case 'register':
//1.获取到所有新用户数据
$name=$_POST['name'];
$email=$_POST['email'];
//邮箱查重
$sql="select * from `users` where `email`='{$email}'";
$stmt=$pdo->prepare($sql);
$stmt->execute();
if ($stmt->rowCount()===1) exit ('<script>alert("该邮箱已经注册,请重新注册!!");location.assign("register.php");</script>');
$password=sha1($_POST['p1']);
$register_time=time();
//2.将新用户插入到表中
$sql="insert `users` set `name`='{$name}',`email`='{$email}',`password` ='{$password}',`register_time`={$register_time}";
$stmt=$pdo->prepare($sql);
$stmt->execute();
if ($stmt->rowCount()===1) exit ('<script>alert("注册成功!!");location.assign("login.php");</script>');
else exit('<script>alert("注册失败!!");location.assign("login.php");</script>');
break;
//未定义
default:
exit("未定义操作!");
}
设置session后,可以通过检查元素Application和temp文件中的session文件查看
注册用的邮箱已存在,提示重新注册
cookie与session相似
- 保存到浏览器中的叫:
cookie
- 保存到服务器中的叫:
session
总结:
- 1、handle.php的功能设计得非常巧妙,通过传过来的参- 数,执行相应的操作,结构非常清晰。
- 2、在程序流程控制中,javascript作用非常强大,需要好好学习。