PHP会话控制
一、对会话控制的认识
- 会话控制的思想是指能够在网站上根据一个会话来跟踪用户,通过会话控制,可以很容易的做到对用户登录的支持并根据其授权级别和个人爱好显示相应的内容,可以根据会话控制记录用户的行为,还可以实现购物车。
二、cookie的应用
1.设置cookie的三种方式
setcookie('name','value','expire','path','domain','secure','httponly');
参数 | 描述 |
---|---|
name | 规定 cookie 的名称 |
value | 规定 cookie 的值 |
expire | 规定 cookie 的过期时间,time()+3600 * 24 * 30 将设置 cookie 的过期时间为 30 天。如果这个参数没有设置,那么 cookie 将在 session 结束后(即浏览器关闭时)自动失效 |
path | 规定 cookie 的服务器路径,如果路径设置为 “/“,那么 cookie 将在整个域名内有效 |
domain | 规定 cookie 的域名,为了让 cookie 在所有子域名中有效,您需要把 cookie 的域名前加上 “.” |
secure | 规定是否需要在安全的 HTTPS 连接来传输 cookie。如果 cookie 需要在安全的 HTTPS 连接下传输,则设置为 TRUE,默认是 FALSE |
httponly | 只可以通过http协议来访问 |
<?php
//1.通过setcookie(),来设置cookie
setcookie('name','admin',time()+600,'/','.php.edu',0);
header()方法发送原生http头来设置cookie
<?php
header("Set-Cookie:n=1");
setrawcookie()发送未经 URL 编码的 cookie
<?php
setcookie('email','7777@qq.com');
setrawcookie('email','8888@163.com');
2.查看cookie
<?php
setcookie('name','admin',time()+600,'/','.php.edu',0);
echo $_COOKIE['name'];
3.更新cookie值
<?php
setcookie('name','admin',time()+600,'/','.php.edu',0);
setcookie('name','zhang');
echo $_COOKIE['name'];
4.删除cookie
<?php
//删除cookie,把第三个参数设置为过去的时间,值设置为空
setcookie('name','admin',time()+600,'/','.php.edu',0);
setcookie('name','',time()-3600,'/','.php.edu',0);
print_f($_COOKIE);
- 如果cookie设置了根目录和域名,删除的时候也要加上根目录和域名
5.localStorage 用于长久保存整个网站的数据,保存的数据没有过期时间,直到手动去删除
localStorage.setItem('name','wang');
/*添加数据*/
localStorage.getItem('name');
/*读取数据*/
/*删除一条数据*/
localStorage.removeItem('name');
/*批量删除数据*/
localStorage.clear();
三、session会话控制
1. 对session的认识
session把用户的会话信息保存到服务器上
session的工作原理:
用户向服务器发送请求,服务器会检测请求里有没有一个session ID,没有的话,服务器会创建一个session文件并生成一个session ID,然后把session ID返回给客户端;如果请求中有session ID的话,服务器就会把之前的会话信息读取出来并且这个会话信息在服务器的任何一个页面都是共享的。
2.session_start():启动会话
<?php
session_start();
//session_start() 函数必须位于 <html> 标签之前
//存储 Session 变量
$_SESSION['name'] = 'admin001';
//输出session变量
echo 'session的值是:'.$_SESSION['name'];
//销毁session
//session_destroy();
session_unset();
//释放当前在内存中已经创建的所有$_SESSION变量,但不删除session文件以及不释放对应的session id
session_destroy();
//删除当前用户对应的session文件以及释放session id,内存中的$_SESSION变量内容依然保留
print_r($_SESSION);
?>
四、实战练习
//demo3.php代码
<?php
$username = $_POST['username'];
$password = $_POST['password'];
//清除cookie
function clearCookies(){
setcookie('username','',time()-3600);
setcookie('isLogin','',time()-3600);
}
//登录验证
if ($_POST['sub']){
if($username == 'admin' && $password == '123456'){
clearCookies();
setcookie('username',$username);
setcookie('isLogin','1');
print_r($_COOKIE);
header("Location:demo4.php");
}else{
exit('<script>
alert("用户名或密码错误");
</script>');
}
}
//退出登录
if($_GET['action'] == 'logOut'){
clearCookies();
}
?>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>实战练习</title>
<style>
body{
margin:0;
padding: 0;
box-sizing: border-box;
background-color: gainsboro;
display:flex;
justify-content: center;
align-items: center;
}
.content{
width: 500px;
height: 300px;
border-radius: 10px;
box-shadow: 0 0 5px #888;
background-color: #fff;
position:absolute;
top:30%;
padding:10px;
}
</style>
</head>
<body>
<table class="content">
<form action="" method="post">
<tr>
<td><label for="username">账号:</label></td>
<td><input type="text" name="username" id="username"></td>
</tr>
<tr>
<td><label for="password">密码:</label></td>
<td><input type="password" name="password" id="password"></td>
</tr>
<tr>
<td colspan="2"><input type="submit" name="sub" value="提交"></td>
</tr>
</form>
</table>
</body>
</html>
//demo4.php代码
<?php
if(!isset($_COOKIE['isLogin']) || $_COOKIE['isLogin'] != "1"){
exit('<script>
alert("请先登录");
location.href = "demo3.php";
</script>');
}
echo '<h1>欢迎登录</h1>'.$_COOKIE['username'].'<a href="demo3.php?action=logOut">退出</a>';
五、学习总结
1.cookie(保存在客户端)
设置setcookie(),header(‘Set-Cookie:a=1’),setrawcookie()
查看cookie用$_COOKIE
更新直接覆盖setcookie()
删除cookie,设置时间为负数,setcookie(‘参数’,’null’,time()-3600);
如果设置了根目录,域名;删除时必须写上根目录和域名
2.session(保存在服务器端)
设置php.ini,session.auto_start = 0;启动会话时需要写session_start();
session变量赋值:$_SESSION[‘name’] = ‘admin’;
删除session:
session_unset();
释放当前在内存中已经创建的所有$_SESSION变量,但不删除session文件以及不释放对应的session id
session_destroy();
删除当前用户对应的session文件以及释放session id,内存中的$_SESSION变量内容依然保留