【CyberSecurityLearning 48】PHP Cookie 和 SESSION

目录

会话控制

设置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的语句: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
<form
	action=""  
	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机制)

<?php

session_start();//开启session 机制

$_SESSION['name']="GGG";

$_SESSION['age']=24;

?>

会在服务器端生成一个文件:

相比之下session要相对安全

2.php()


    <?php
    session_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
<form
	action=""
	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值失效了

因此,我们日常生活中也应该要重视注销这一环节,随手注销是个好习惯!

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值