【CyberSecurityLearning 48】PHP Cookie 和 SESSION
目录
会话控制
COOKIE
设置cookie的语句:setcookie();
setcookie的属性(性质):
服务器怎么接收cookie信息
session机制
session_start
$_SESSION 完成对session数据的读写
源码
使用Cookie实现对用户登录的验证
index.php
login.php
logout.php
Cookie存在的风险实验(cookie被窃取)
1.php(开启session机制)
2.php()
使用session机制实现用户登入验证
index.php
login.php
logout.php
session安全性实验
会话控制
浏览网页的时候,使用的是HTTP协议。
客户端发出请求
服务端给出响应
COOKIE
cookie就是“身份证”
存储在客户端的一段文本,文件|字符串(大多数情况下,字符串)
服务器发给客户端(cookie存储在客户端)
每次客户端浏览器 在发出请求的时候,自动都会携带Cookie信息
cookie信息也是键值对的形式
cookie信息是从服务器端向客户端写入的
设置cookie的语句:setcookie();
<?php
setcookie("name","GGG"); //setcookie就是PHP中设置cookie的一个语句,服务器端向客户端写入
?>
setcookie返回的是一个布尔类型的值!
setcookie的属性(性质):
name Cookie的名称
value Cookie的值
expire 过期时间(终止; 到期)
path Cookie的有效路径
domain Cookie的域名
secure https(如果不是https,cookie就用不了)
httponly 仅仅通过http 协议访问,不能通过JS访问
浏览器cookie信息在哪里看?F12--存储
服务器端向客户端写入cookie(身份证)的过程:
浏览器在访问页面是时候会自动携带cookie信息
1.php代码:
<?php
setcookie("name","AJEST",null,null,null,null,null);
// setcookie有七个参数
//过期时间写null就是浏览器关闭的时候到期
//路径写null就是默认
//null就是默认,不写就用默认选项
/*
name Cookie的名称
value Cookie的值
expire 过期时间(终止; 到期)
path Cookie的有效路径
domain Cookie的域名
secure https(如果不是https,cookie就用不了)
httponly 仅仅通过http 协议访问,不能通过JS访问
*/?>
服务器怎么接收cookie信息
$_COOKIE
2.PHP代码:
<?php
var_dump($_COOKIE);
?>
通过这个过程就完成了下发身份证再上传身份证的过程:
下发是通过setcookie()下发cookie
我们怎么提供身份证信息?(每次客户端浏览器 在发出请求的时候,自动都会携带Cookie信息)
窃取和欺骗
窃取是被窃取,就是你身份证丢了(身份证是放在客户端)
欺骗就是攻击者欺骗服务器
实际上身份证放在我们浏览器端是不安全的,所以我们可以考虑把身份证放在服务器端
如果我们把身份证放在服务器端,这种机制叫Session机制
session机制
session会把我们的身份证放在服务器端,但是session机制要依赖cookie实现,说明我们cookie是存放在浏览器端的一个文本,session也就是我们用户信息是存在服务器端的,但是我们session要依赖cookie来实现,我们session有个属性叫session id,这个session id也是发给浏览器的。
session id也有窃取和欺骗的风险,但是我们身份证放在服务器端,比放在浏览器端更安全!
session_start
session的实现我们需要session_start
<?php
session_start();//开启session机制
?>
再打开一个浏览器localhost/1.php,会发现这两个浏览器的session id不一样,意味着通过这个session id就可以区分不同的用户
session是放在服务器端的,那他到底放在服务器端的哪个位置呢?放在哪个缓存下
$_SESSION 完成对session数据的读写
源码
使用Cookie实现对用户登录的验证
index.php
<meta charset="utf-8">
<h1>刹那芳华论坛</h1><?php
if(isset($_COOKIE['name'])){echo "欢迎您,{$_COOKIE['name']} <a href='./logout.php'>注销</a>";
}else{echo "<a href='./login.php'>请登录</a>";
}
?>
login.php
<meta charset="utf-8">
<?php
if(isset($_POST['userSubmit'])){if(isset($_POST['userName']) && $_POST['userName']=="AJEST"&& isset($_POST['userPass']) && $_POST['userPass']=="123456"){if(setcookie("name","AJEST")){echo "登录成功,<a href='./index.php'>返回首页</a>";}else{echo "设置cookie错误";}}else{echo "用户名或密码错误<a href='./login.php'>请重新登录</a>";}
}else{
$htm=<<<HTML
<formaction="" method="post"
>
用户名:<input type="text" name="userName"><br/>
密码:<input type="password" name="userPass"><br/>
<input type="submit" name="userSubmit" value="登录"><br/>
</form>
HTML;echo $htm;
}?>
logout.php
<meta charset="utf-8">
<?php
setcookie("name",$_COOKIE['name'],time()-3600); //time()是当前时间
echo "已注销,<a href='./index.php'>返回首页</a>";
?>
进入首页(index.php)
登录(login.php)
注销(logout.php)
Cookie存在的风险实验(cookie被窃取)
窃取Cookie,直接登入
在一个浏览器上登入
打开另外一个浏览器的localhost页面,看到属于未登录状态,但是由于我们知道了cookie信息窃取了
我们打开console面板,写如cookie信息
document.cookie=("name=AJEST")
再刷新一下页面,就可以直接登录
现在,我们将第一个浏览器的页面注销,cookie信息被清空
但在另一个浏览器上没有收到任何影响
1.php(开启session机制)
<?phpsession_start();//开启session 机制$_SESSION['name']="GGG";$_SESSION['age']=24;?>
会在服务器端生成一个文件:
相比之下session要相对安全
2.php()
<?phpsession_start();var_dump($_SESSION);?>
我们只要在页面中开启了session_start
2.php就会根据我们客户端传过来的session id去找我们对应的缓存
如果缓存有值,$_SESSION就会获取存储在服务器端的session的这些变量
打开服务器端的session文件,会看到里面存放了我们前面设置的信息
使用session机制实现用户登入验证
index.php
<?php
session_start();//session_start()要写在最前面,前面不能有任何输出
?>
<meta charset="utf-8">
<h1>刹那芳华论坛</h1>
<?php
if(isset($_SESSION['userName']) && $_SESSION['userName'] =="GGG")
{echo "欢迎您,{$_SESSION['userName']} <a href='./logout.php'>注销</a>";
}
else
{echo "<a href='./login.php'>请登录</a>";
}
?>
login.php
<?php
session_start();
echo "<meta charset='utf-8'>";
?>
<?php
if(isset($_POST['userSubmit'])){if(isset($_POST['userName']) &&isset($_POST['userPass']) &&$_POST['userName'] == "GGG" &&$_POST['userPass'] == "123456"){$_SESSION['userName'] = $_POST['userName'];echo "登录成功,<a href='./index.php'>返回首页</a>";}else{echo "用户或密码错误,<a href='./login.php'>请重新登录</a>";}}else{$html=<<<HTML
<formaction=""method="post"
>
用户名:<input type="text" name="userName"><br />
密码:<input type="password" name="userPass"><br />
<input type="submit" name="userSubmit" value="登录">
</form>
HTML;echo $html;
}
?>
logout.php
<?php
session_start();
session_destroy();//session的注销函数
echo "<meta charset='utf-8'>已注销,<a href='./index.php'>返回首页</a>";
?>
在服务器端,生成一个与session值相对应的文件,文件为空
登录成功
再来看我们服务器端的session文件,存入了登录验证信息
返回首页
注销
与之对应的在服务器端,session文件被清空删除
session安全性实验
通样我们在另一个浏览器上打开,利用session值登入测试
服务器端与之对应的session值文件中存入信息
打开另外一个浏览器,生成新的sess值
替换前面的sess值
刷新:直接就进去了
当我们在第一个浏览器上注销之后
在另一个浏览器上使用前面的session值就会失效
因为服务器端与之对应的session文件内容已被清空,整个sessiom值失效了
因此,我们日常生活中也应该要重视注销这一环节,随手注销是个好习惯!
【CyberSecurityLearning 48】PHP Cookie 和 SESSION相关推荐
- 还分不清 Cookie、Session、Token、JWT?
点击上方蓝色"方志朋",选择"设为星标" 回复"666"获取独家整理的学习资料! 转自:掘金 作者:秋天不落叶 juejin.im/po ...
- 面试官:要不讲讲 Cookie、Session、Token、JWT之间的区别?
击上方"朱小厮的博客",选择"设为星标" 后台回复"加群",加入组织 来源:22j.co/btPm 什么是认证(Authentication ...
- 几个实用的Servlet应用例子-入门、cookie、session及上传文件
1Servlet可以被认为是服务端的applet,它被WEB服务器加载和执行,前端可以显示页面和获得页面数据,后台可以操纵数据库,能完成JavaBean的很多功能.在这里我较为详细的说说Servl ...
- api token 什么意思_还分不清 Cookie、Session、Token、JWT?
什么是认证(Authentication) 通俗地讲就是验证当前用户的身份,证明"你是你自己"(比如:你每天上下班打卡,都需要通过指纹打卡,当你的指纹和系统里录入的指纹相匹配时,就 ...
- cookie、session和application超详解说
cookie.session和application都是些什么神? 前言: 一直想写一篇关于cookie和session的博客,由于种种原因,一直没有整理,这不,今天还就遇到问题了,之前虽然会,但是好 ...
- 计算机网络——cookie、session、token原理
摘要 HTTP是无状态的Web服务器,一次对话完成后下一次对话完全不知道上一次对话发生了什么,但是随着网络的不断发展,比如电商中的购物车只有记住了用户的身份才能够执行接下来的一系列动作.所以此时就需要 ...
- Cookie、Session、Token与JWT解析
作者:_code_x 链接:https://www.jianshu.com/p/cab856c32222 认证.授权与凭证 什么是认证(Authentication)? 通俗地讲就是验证当前用户的身份 ...
- Cookie、Session、Token和JWT
1.什么是认证(Authentication) 通俗地讲就是验证当前用户的身份,证明"你是你自己"(比如:你每天上下班打卡,都需要通过指纹打卡,当你的指纹和系统里录入的指纹相匹配时 ...
- 一文读懂Cookie、Session、Token和JWT(建议收藏)
文章来源: https://mp.weixin.qq.com/s/iSoGtv8AUaUBUn4pPnNMXg 前半部分有少许增删. 什么是认证(Authentication) 什么是授权(Autho ...
最新文章
- php根据时间搜索,yii2实现根据时间搜索的方法
- 院士论坛|李德仁:测绘遥感能为智能驾驶做什么? ——论测绘遥感与智能驾驶
- boost::timer模块timer、job_timer和progress_display示例程序
- HDLBits答案(2)_Verilog向量基础
- Python 字符串操作(string替换、删除、截取、复制、连接、比较、查找、包含、大小写转换、分割等)...
- LinkedList剖析
- matlab 与数据库操作
- C语言--结构体与内存对齐准则简单理解
- 笔记本电脑自带麦克风吗_想让声音变得好听吗,不花一分钱,让你的电脑拥有外置麦克风...
- 获得对摄像头的访问权
- sap 标准委外和工序委外_SAP那些事-实战篇-74-公司间委外的几种方式探讨
- nginx历史版本下载链接
- windows AD自动化-OU-group-user (二)
- bash中符号那点事
- Linux教程+操作系统教程
- tbschedule
- 某城郊110kV降压变电站监控系统设计
- 山东大学人工智能导论实验四 利用神经网络分类红色和蓝色的花
- Chrome浏览器使用AdGuard去除百度热搜
- 科普知识------世界洋流[地球上有哪些洋流]