cookie与session的区别(图文详解)

news/2024/5/18 16:39:48 标签: session, cookie

一、共同之处:
cookiesession都是用来跟踪浏览器用户身份的会话方式。

二、工作原理:
1.Cookie的工作原理
(1)浏览器端第一次发送请求到服务器端
(2)服务器端创建Cookie,该Cookie中包含用户的信息,然后将该Cookie发送到浏览器端
(3)浏览器端再次访问服务器端时会携带服务器端创建的Cookie
(4)服务器端通过Cookie中携带的数据区分不同的用户
在这里插入图片描述

2.Session的工作原理
(1)浏览器端第一次发送请求到服务器端,服务器端创建一个Session,同时会创建一个特殊的Cookie(name为JSESSIONID的固定值,value为session对象的ID),然后将该Cookie发送至浏览器端
(2)浏览器端发送第N(N>1)次请求到服务器端,浏览器端访问服务器端时就会携带该name为JSESSIONID的Cookie对象
(3)服务器端根据name为JSESSIONID的Cookie的value(sessionId),去查询Session对象,从而区分不同用户。
name为JSESSIONID的Cookie不存在(关闭或更换浏览器),返回1中重新去创建Session与特殊的Cookie
name为JSESSIONID的Cookie存在,根据value中的SessionId去寻找session对象
value为SessionId不存在(Session对象默认存活30分钟),返回1中重新去创建Session与特殊的Cookie
value为SessionId存在,返回session对象
Session的工作原理图
在这里插入图片描述

在这里插入图片描述

三、区别:

cookie数据保存在客户端,session数据保存在服务端。

session
简单的说,当你登陆一个网站的时候,如果web服务器端使用的是session,那么所有的数据都保存在服务器上,客户端每次请求服务器的时候会发送当前会话sessionid,服务器根据当前sessionid判断相应的用户数据标志,以确定用户是否登陆或具有某种权限。由于数据是存储在服务器上面,所以你不能伪造。

cookie
sessionid是服务器和客户端连接时候随机分配的,如果浏览器使用的是cookie,那么所有数据都保存在浏览器端,比如你登陆以后,服务器设置了cookie用户名,那么当你再次请求服务器的时候,浏览器会将用户名一块发送给服务器,这些变量有一定的特殊标记。服务器会解释为cookie变量,所以只要不关闭浏览器,那么cookie变量一直是有效的,所以能够保证长时间不掉线。

如果你能够截获某个用户的cookie变量,然后伪造一个数据包发送过去,那么服务器还是 认为你是合法的。所以,使用cookie被攻击的可能性比较大。

如果cookie设置了有效值,那么cookie会保存到客户端的硬盘上,下次在访问网站的时候,浏览器先检查有没有cookie,如果有的话,读取cookie,然后发送给服务器。

所以你在机器上面保存了某个论坛cookie,有效期是一年,如果有人入侵你的机器,将你的cookie拷走,放在他机器下面,那么他登陆该网站的时候就是用你的身份登陆的。当然,伪造的时候需要注意,直接copy cookie文件到 cookie目录,浏览器是不认的,他有一个index.dat文件,存储了 cookie文件的建立时间,以及是否有修改,所以你必须先要有该网站的 cookie文件,并且要从保证时间上骗过浏览器

两个都可以用来存私密的东西,session过期与否,取决于服务器的设定。cookie过期与否,可以在cookie生成的时候设置进去。

四、区别对比:
(1)cookie数据存放在客户的浏览器上,session数据放在服务器上
(2)cookie不是很安全,别人可以分析存放在本地的COOKIE并进行COOKIE欺骗,如果主要考虑到安全应当使用session
(3)session会在一定时间内保存在服务器上。当访问增多,会比较占用你服务器的性能,如果主要考虑到减轻服务器性能方面,应当使用COOKIE
(4)单个cookie在客户端的限制是3K,就是说一个站点在客户端存放的COOKIE不能3K。
(5)所以:将登陆信息等重要信息存放为SESSION;其他信息如果需要保留,可以放在COOKIE中

转自CSDN 作者:秋风不识路


http://www.niftyadmin.cn/n/1624451.html

相关文章

i节点模拟

添加一块20G的硬盘分区fdisk /dev/sdbnp14Gnp232Mw内核重新加载一下partprobe /dev/sdbmkdir /datafdisk -l格式化 mkfs -t ext4 /dev/sdb2挂载 mount /dev/sdb2 /data/mount查看节点数 df -i /data/vi 11.sh#!/bin/bashi1while [ $i -le 10029 ]dotouch /data/file…

分离你的spring配置文件,让结构更清晰

前言 接着上一篇的,这次框架的改变也成功分离了spring的配置文件。 以前,spring的配置文件从一开始的一点,到后面的逐渐变多,慢慢的,在一个spring的配置文件中就包含了好几块不同的bean的配置。有springMVC的&#xff…

while与do while区别(图文详解)

首先介绍while的使用&#xff0c;基本模式 while(循环条件){循环操作; }例 private void testwhile(){int i 0;while (i < 5) {i ;Log.e(TAG, "i " i);}}输出结果 i 1 i 2 i 3 i 4 i 5do while 的使用&#xff0c;基本模式 do {循环操作 } while(循环…

前端学习文档推荐

jQuery 基本原理 JavaScript 秘密花园 CSS参考手册 JavaScript 标准参考教程 ECMAScript 6入门 转载于:https://www.cnblogs.com/SoundOfTheSea/p/6709693.html

python 打印9*9乘法表

# -*- coding: utf8 -*- # Author:wxq1、 for i in range(1,10):for j in range(1,i1):print "%d*%d%2d"%(i,j,i*j),print ("")2、 for i in range(1,10):for k in range(1,10-i):print (" "),for j in range(1,i1):print "%d*%d%2d&quo…

杜教筛 [学习笔记]【更新中】

杜教筛 嘟嘟嘟 tangjz orz jiry_2 orz 任之洲 2016国家队论文 orz 概述 前置技能&#xff1a;莫比乌斯反演 可以在\(O(\frac{3}{4})\)或\(O(\frac{2}{3})\)复杂度完成数论函数(前缀和)的计算 一般形式 数论函数\(f(n)\)&#xff0c;求\[ S(n) \sum_{i1}^n f(i) \] 对于任意数论…

K-V数据库与关系型数据库区别

1.KV数据库速览 K-V存储系统是最简单的数据库类型之一。几乎所有的编程语言都带有内置的K-V存储功能。比如C中STL的map&#xff0c;Java的HashMap&#xff0c;Python的dictionary。K-V数据库通常包含下列接口&#xff1a; Get(key): 获取之前以"key"作为标识存储的…

浏览器插件(站长工具箱)

下载地址&#xff1a;站长工具箱 &#xff08;教程里面很详细了&#xff09;