会话控制-cookie
- cookie的两种设置方式
cookie存储在客户端
1.setcookie()设置cookie
setcookie('cookie名称','cookie值','cookie存活时间','cookie 的服务器路径','cookie的有效域名','规定是否需要在安全的 HTTPS 连接来传输 cookie,是设为true,否则false';
注;常用参数前三个,后面选用
例:
setcookie('username','zhangsan',time()+3600*24,'/','.cc.com','1');
2.通过header响应头设置cookie
header('Set-cookie:cookie名=cookie值')
例:
header('Set-cookie:a=1');
注意:如果设置cookie时不添加生存时间那么当浏览器关闭时会自动清除掉没有设置生存时间的cookie
cookie设置后再第二次加载时才能访问到,第一次在响应头中显示,第二次在请求头中显示[响应头比请求头慢一步]
- 更新cookie
注意:更新cookie,参数要一一对应
更新cookie [就是在设置一个cookie名字和要修改的那个cookie名相同把cookie值或其他参数修改,直接覆盖上一个同名的cookie]
例:
setcookie('user','zhangsan');
// 更新cookie值
setcookie('user','lisi');
// 打印查看cookie是否更新成功
// 使用超全局数组$_COOKIE来打印输出
var_dump($_COOKIE['user']); // 输出 "lisi"
- 打印输出cooie值
使用超全局数组$_COOKIE来打印输出查看cookie值
// 打印输出全部cookie的值
var_dump($_COOKIE);
// var_dump($_COOKIE['指定的cookie名称']);打印输出指定值
例:
var_dump($_COOKIE['user']); // 输出 lisi
- 销毁session
注意:销毁cookie时如果该cookie有写路径销毁的时候一定要把路径参数写上
销毁cookie setcookie('要销毁的cookie的名',值设置为null,过期时间time()-3600/或0);
例:
setcookie('username','',time()-3600,'/');
- 设置cookie时值中有特殊字符让特殊字符正常显示
例:
// 设置cookie是特殊字符正常显示
setcookie('email','123@qq.com'); // 浏览器显示 Set-Cookie: email=123%40qq.com [@被解析成了一个%]
// 让特殊字符正常输出
setrawcookie('email','123@qq.com'); // 浏览器显示 Set-Cookie: email=123@qq.com
PHP会话控制-session
session存储在服务器端
- 设置或使用session第一步先开启session
session_stat();
- 设置session
例:
$_SESSION["test"] = "ceshi";
- 输出查看session
// 使用超全局数组$_SESSION
// 查看指定session值 $_SESSION['要查看的session的名称'];
例:
var_dump($_SESSION['test']);
// 查看全部session值
例:
var_dump($_SESSION);
- 销毁session
//unset($_SESSION['要销毁的session名称'])
例:
unset($_SESSION['test']);
// session_destroy(); 销毁所有session,没有参数
例:
session_destroy();
使用cookie实现用户7天内自动登录
// 登录页面
<?php
// 获取post提交的值
$username = $_POST['username'];
$password = $_POST['password'];
// echo $username,$password;
// 清除cookie中所有的用户信息
function clearCookies(){
setcookie("username",null,0);
setcookie("isLogin",null,0);
}
// 判断是否提交数据
if (isset($_POST['sub'])) {
// 判断用户名和密码是否正确
if ($username == '张三' && $password=='123456') {
// 清除之前的登录用户cookie
clearCookies();
// 信息正确设置cookie
setcookie('username',$username,time()+3600*7);
setrawcookie('isLogin','1',time()+3600*7);
// 设置完成直接跳转页面
header("Location:index.php");
} else {
exit('用户名或密码不正确');
}
}
// 当点击退出时跳转到该页面并在get中附带action动作,值等于logOut
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>
</head>
<body>
<h1>用户登录</h1>
<form action="" method="post">
<table border="1">
<tr>
<td>用户名</td>
<td>
<input type="text" name="username" placeholder="请输入用户名">
</td>
</tr>
<tr>
<td>密码</td>
<td>
<input type="password" name="password" placeholder="请输入密码">
</td>
</tr>
<tr>
<td align="center" colspan="2">
<input name="sub" type="submit" value="提交111111">
</td>
</tr>
</table>
</form>
</body>
</html>
<?php
// 登录成功页面
// 判断cookie中sLogin是否存在如果存在值是否等于1满足这两项进入登录,否则拦截
if (!isset($_COOKIE['isLogin']) || $_COOKIE['isLogin'] !="1") {
exit('<script>
alert("请您先登录再访问");
location.href="login.php";
</script>');
}
?>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>主页</title>
</head>
<body>
<h1>主页</h1>
<?php echo "欢迎您" . $_COOKIE['username']?>
<a href="login.php?action=logOut">退出</a>
</body>
</html>