栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Cookie&Session区别

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Cookie&Session区别

常用的会话跟踪是cookie和Session。cookie是客户端记录信息再确认用户身份,而Session是通过服务器记录信息确认用户信息。

cookie:

cookie是客户端技术,程序把每个用户的数据以cookie的形式写给用户各自的浏览器。当用户使用浏览器再去访问服务器中的web资源时,就会带着各自的数据去。这样,web资源处理的就是用户各自的数据了。

会话cookie:没有设置cookie的生命期,简而言之就是关闭浏览器窗口,cookie就消失,这个时候cookie一般保存在内存里面。若设置了过期时间的cookie,一般会把cookie保存在硬盘里面,只要在时间内,关闭再次打开浏览器都可以追踪到用户的信息。

cookie原理:

由服务器产生内容,浏览器收到请求后保存在本地;当浏览器再次访问时,浏览器会自动带上cookie,这样服务器就能通过cookie的内容来判断这个是“某位”了。大多数的应用都是用cookie来实现Session跟踪的,第一次创建Session的时候,服务端会把HTTP协议告诉客户端,会在cookie里面记录一个Session ID,以后每次请求都会把这个带有信息的ID发送给服务器,便能知道用户是谁。(若某个用户的浏览器禁用了cookie怎么办呢?一般会使用URL重写技术来进行会话跟踪,就是每次HTTP交互时,URL后面都会附加一个 sid=xxx的参数,这样服务端便可以识别用户)

为什么有了cookie还需要Session?

基于http协议的无状态特征,服务器根本就不知道访问者是“谁”。cookie虽然在一定程度上解决了“保持状态”的需求,但是由于cookie本身保存在客户端,可能被拦截或窃取,因此就需要有一种新的东西,它能支持更多的字节,并且保存在服务器,有较高的安全性。这就是session。 我们可以给每个客户端的cookie分配一个唯一的id,这样用户在访问时,通过cookie,服务器就知道来的人是“谁”。然后我们再根据不同的cookie ID,在服务器上保存一段时间的私密资料,如“账号密码”等等。 总结而言:cookie弥补了http无状态的不足,让服务器知道来的人是“谁”;但是cookie以文本的形式保存在本地,自身安全性较差;所以我们就通过cookie识别不同的用户,对应的在session里保存私密的信息。

cookie内容:

cookie的内容包括:名字,值,过期时间,路径和域。路径和域一起构成cookie的作用范围。

Set-cookie: "name=value;domain=.domain.com;path=/;expires=Sat, 11 Jun 2016 11:29:42 GMT;HttpOnly;secure" 其中name=value是必选项,其它都是可选项。cookie的主要构成如下:

name:一个唯一确定的cookie名称。通常来讲cookie的名称是不区分大小写的。

value:存储在cookie中的字符串值。最好为cookie的name和value进行url编码

domain:cookie对于哪个域是有效的。所有向该域发送的请求中都会包含这个cookie信息。这个值可以包含子域(如:yq.aliyun.com),也可以不包含它(如:.aliyun.com,则对于aliyun.com的所有子域都有效).

path: 表示这个cookie影响到的路径,浏览器跟会根据这项配置,像指定域中匹配的路径发送cookie。

expires:失效时间,表示cookie何时应该被删除的时间戳(何时应该停止向服务器发送这个cookie)。如果不设置这个时间戳,浏览器会在页面关闭时即将删除所有cookie;不过也可以自己设置删除时间。这个值是GMT时间格式,如果客户端和服务器端时间不一致,使用expires就会存在偏差。

max-age: 与expires作用相同,用来告诉浏览器此cookie多久过期(单位是秒),而不是一个固定的时间点。正常情况下,max-age的优先级高于expires。

HttpOnly: 告知浏览器不允许通过脚本document.cookie去更改这个值,同样这个值在document.cookie中也不可见。但在http请求仍然会携带这个cookie。注意这个值虽然在脚本中不可获取,但仍然在浏览器安装目录中以文件形式存在。这项设置通常在服务器端设置。

secure: 安全标志,指定后,只有在使用SSL链接时候才能发送到服务器,如果是http链接则不会传递该信息。就算设置了secure 属性也并不代表他人不能看到你机器本地保存的 cookie 信息,所以不要把重要信息放cookie就对了服务器端设置

session:

访问服务器某个网页的时候,会在服务器端的内存里开辟一块内存,这块内存就叫做session,而这个内存是跟浏览器关联在一起的。这个浏览器指的是浏览器窗口,或者是浏览器的子窗口,意思就是,只允许当前这个session对应的浏览器访问,就算是在同一个机器上新启的浏览器也是无法访问的。而另外一个浏览器也需要记录session的话,就会再启一个属于自己的session

Session原理:

HTTP协议是非连接性的,关闭浏览器后,链接就断开了,就没有任何机制去记录取出后的信息。而当需要访问同一个网站的另外一个页面时,这个时候取出来的信息,就读不出来了。所以必须要有一种机制让页面知道原理页面的session内容。

Session如何与浏览器一一对应?

当程序需要为某个客户端的请求创建一个session时,服务器首先检查这个客户端的请求里是否已包含了一个session标识(称为session ID),如果已包含则说明以前已经为此客户端创建过session,服务器就按照session ID把这个session检索出来使用(检索不到就新建一个),如果客户端请求不包含session ID,则为此客户端创建一个session并且生成一个与此session相关联的session ID(session ID的值应该是一个既不会重复,又不容易被找到规律以仿造的字符串)。这个session ID将被在本次响应中返回给客户端保存。

Session的两种实现方式:

通过cookie实现:就是把session的id 放在cookie里面(),当允许浏览器使用cookie的时候,session就会依赖于cookies,当浏览器不支持cookie后,就可以通过第二种方式获取session内存中的数据资源。 URL重写:response.encodeURL()/encodeURL()

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/763727.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号