主要内容:
- cookie的创建、查看、更新、删除
- cookie的运作原理
- session操作:创建、销毁
- 实战:网站的简单登陆。
1. cookie的创建、查看、更新、删除
// ① cookie的设置
//设置发送cookie,不设置第三个参数,cookie由浏览器维护,浏览器关闭,cookie消失
setcookie("username","Peter");
//设置第三个参数,由硬盘保存
setcookie("key","999",strtotime(" +7 days"));
//header()函数来设置cookie
header('Ser-cookie:a=4');
// ② cookie的删除
//删除cookie,把第三个参数设置为过去的时间,值设置为空
setcookie("username","Peter");
setcookie("username"," ",time()-3600);
// ③ 更新cookie,参数要一一对应
setcookie("username","Max");
setcookie("username","MAX123");
setcookie("a","5");
setcookie("a","6",time()+300);
// ④ 查看cookie
$_COOKIE["username"]; //查看单个cookie
print_r($_COOKIE); //查看所有的cookie
- 一个知识点:setcookie(),setrawcookie()的区别
//@会变成%40
setcookie("email","54564151@qq.com");
//正常显示。发送未经 URL 编码的 cookie
setrawcookie("email","35121312@qq.com");
2. cookie的运作原理
setcookie("a","4");
echo $_COOKIE['a'];
刷新浏览器才能获取cookie的值。示例:
服务器端:
第一步:服务器解析setcookie(‘aa’,’4’)
因为cookie是设置在客户端的,setcookie函数自己并不能设置cookie,
它只能通过头信息的方式告诉浏览器说:我要设置一个cookie,键为a,值为4,
你在你那里帮我设置一下。
第二步:服务器返回信息
其中返回的头信息中带有Set-Cookie a=4,浏览器收到这个头信息,
把cookie存放到客户端计算机的某个文件中
第三部:刷新浏览器,再次访问服务器的时候,同样,也会把很多头信息带给服务器,
只不过这次带过去的cookie中,就多了一个a=4了。
所以$_COOKIE[‘a’]自然就能从cookie字符串中找到这个键为a的cookie的值。
*/
3. session操作:创建、销毁
session_start();//创建session 开始一个会话。进行session的初始化
//session是基于cookie,在开启session之前不能有任何内容的输出
//创建一个session
$_SESSION["username"] = "Peter";
$_SESSION["uid"] = 1;
//销毁session,注销session变量
session_destroy();//销毁和当前session有关的所有资料,并不会清空$_SESSION
$_SESSION = array();//销毁和当前session有关的所有资料,并清空$_SESSION
//reset也可以考虑。
print_r($_SESSION);
4. 一个登录页面的操作
- 因为没有涉及到数据库内容,因此相对简单一些。
- login.php中的内容
<?php
//数据接收
$username = $_POST['username'];
$password = $_POST['password'];
//检测到登录动作,清除cookie中所有的别的用户信息
function clearCookies(){
setcookie("username"," ",time()-3600);
setcookie("isLogin", " ", time()-3600);
}
//用户登录
if ($_GET['action'] == "login") {
if ($username == "Peter" && $password == "123456") {
clearCookies();
setcookie("username",$username);
setcookie("isLogin","1");
header("Location:index.php");
} else{
exit("用户名或密码错误");
}
}
//退出登录
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="login.php?action=login" method="post">
<table border="1">
<tr>
<td>用户名</td>
<td>
<input type="text" name="username" placeholder="PLEASE ENTER YOUR USERNAME">
</td>
</tr>
<tr>
<td>密码</td>
<td>
<input type="password" name="password" placeholder="PLEASE ENTER YOUR PASSWORD">
</td>
</tr>
<tr>
<td align="center" colspan="2">
<input name="sub" type="submit">
</td>
</tr>
</table>
</form>
</body>
</html>
- index页面中的内容
<?php
//如果用户没有通过身份验证,页面跳转至登录页面
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>
5. 作业部分
- 销毁session的方法
$_SESSION['username'] = 'Wang';
$_SESSION['age'] = '28';
echo '创建session后打印,结果为一个array:<br><br>';
print_r($_SESSION);
echo '<hr>';
echo 'destroy的结果:<br><br>';
session_destroy();
print_r($_SESSION);
echo '<hr>';
echo '赋予控制array()后的结果:<br><br>';
$_SESSION = array();
print_r($_SESSION);
echo '<hr>';
echo 使用reset后的结果后的结果:<br><br>';
$_SESSION['username'] = 'Gang';
$_SESSION['age'] = '29';
session_reset();
print_r($_SESSION);
// 好像reset没用,后面查询下用法。
具体如图:
- 使用会话控制cookie技术实现用户7天自动登录(记住密码)
- 现在是将password直接保存到了cookie中,后面就会发现这种方法是不对的。需要用md5等方法。不过确实实现了直接登陆过去的效果。具体见自己文件夹中的my2.php。
function clearCookies(){
setcookie("username"," ",time()-3600);
setcookie("password"," ",time()-3600);
setcookie("isLogin", " ", time()-3600);
}
if ($_GET['action'] == "login") {
if ($username == "Peter" && $password == "123") {
clearCookies();
setcookie("username",$username, strtotime('+7 days'));
setcookie("password",$password, strtotime('+7 days'));
setcookie("isLogin","1", strtotime('+7 days'));
header("Location:index.php");
} else{
exit("用户名或密码错误");
}
}
if ($_COOKIE['username'] == "Peter" & $_COOKIE['password'] == "123" & $_COOKIE['isLogin'] == "1") {
header("Location:index.php");
} else{
header("Location:login.php");
}