目录
为什么要使用cookie
HTTP最大的特点是无连接无状态,使用Cookie和Session的技术就是为了解决这个问题,简单来说,就是让浏览器在一段时间内认识你。
Cookie是什么
从安全的角度出发,当我们去访问网站,有些内容或者文件只有登录或者进行身份验证后才能访问,但是我们不可能访问一个内容或者文件,就进行一次登录,很影响用户的体验,所以我们使用cookie技术将我们进行一个身份验证,只要通过一次验证就可以带着cookie访问文件。
Cookie验证实验
开始之前先对下面代码进行一个分析:
登录代码创建一个登录页面,这里我将登录页面命名为00.php在登录框输入账号和密码,将输入的密码交给login.php代码也就是后端接收带代码,后端接收代码将前端传入的用户名和密码,与数据库进行对比,如果匹配上将跳转到666.php页面,如果失败将提示登录失败,
那么如何验证cookie的作用
我们发现666.php只有通过login.php的验证才能访问到,如果选择直接进行访问,将会提示黑客攻击,此时就可以验证cookie在访问文件时起到了验证身份的作用
00.php登录代码:
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>登录</title>
</head>
<body>
<div>
<b>登录</b>
<form action="login.php" method="post">
<p><span>用户名:</span><input type="text" name="user" required="" /></p>
<p><span>密码:</span><input type="password" name="pass"/ required=""></p>
<p><input type="reset" name=""/> <input type="submit" name=""/></p>
</form>
<a href="register.html">新用户注册</a>
</div>
</body>
</html>
login.php后端接收代码
<meta charset="utf-8">
<?php
$conn = mysqli_connect('localhost','root','root','security') or die('数据库连接失败');
$conn->query("SET NAMES 'UTF8'");
$user = $_POST['user'];
$pass = $_POST['pass'];
$sql="SELECT * FROM users where username='{$user}' and password='{$pass}'";
$result=$conn->query($sql);
$row = mysqli_num_rows($result);
//若表中存在输入的用户名和密码,row=1;若表中用户名不存在或密码错误,则row=0
if($row == 1){
echo $row['user']."登陆成功!";
}
else{
echo"登录失败,请重新登录!";
}
?>
666.php登录成功后跳转代码
<meta charset="utf-8">
<?php
$user=$_COOKIE['user'];
if($user !=''){
echo '这里是管理页面';
} else{
echo '停止黑客攻击';
}
?>
Session
什么是session
http是无状态协议,每次请求都是独立的线程。所以为了维护上下文信息,追踪同一个用户。Session是另一种记录客户状态的机制,不同的是Cookie保存在客户端浏览器中,而Session保存在服务器上。客户端浏览器访问服务器的时候,服务器把客户端信息以某种形式记录在服务器上。这就是Session。客户端浏览器再次访问时只需要从该Session中查找该客户的状态就可以了。Session是服务器端会话技术,在一次会话的多次请求间共享数据,将数据保存在服务器端的HTTPSession对象中。
Session原理
(1)Session会为每一次会话分配一个Session对象
(2)同一个浏览器发起的多次请求,同属于一次会话(Session)
(3)首次使用到Session时,服务器会自动创建Session,并创建Cookie存储SessionId发送回客户端