Session和Cookie的区别与联系

Posted zxf123

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Session和Cookie的区别与联系相关的知识,希望对你有一定的参考价值。

一,Session
1,概念:session存放在服务端,一般情况下,服务器默认30分钟保存这个Session,过了时间限制就会销毁,在销毁之前,开发者可以将用户的一些数据以key和value的形式暂时存放在这个Session中。当然,也有使用数据库将这个Session序列化保存起来,好处是没有了时间的限制,坏处是随着时间的增加,这个数据库会急速膨胀,特别是访问量增加的时候,所以一般采取第一种方式,以减轻服务器压力。

2,请求流程:当浏览器第一次发送请求时,服务器自动生成一个Session和一个Session ID用来唯一表示这个Session,并将其通过响应发送到浏览器,当浏览器第二次发送请求的时候,会将前一次服务器响应中Session ID放在请求中一并发送到服务器上,服务器从中提取出Session ID并和保存的所有Session ID进行对比,找到这个用户对应的Session。

3,Session客户端实现形式(即Session ID的保存方法) 一般浏览器提供两种方式来保存,还有一种是程序员使用html隐藏域的方式自定义实现;

【1】使用Cookie来保存,这是最常见的方法,例如“记录我的登录状态”功能的实现正是基于这种方式的。服务器通过设置Cookie的方式将Session ID发送到浏览器,如果我们不设置这个过期时间,那么这个Cookie将不存放在硬盘上,当浏览器关闭的时候,Cookie就消失了,这个Session ID就丢失了。如果我们设置这个时间为若干天后,那么这个Cookie会保存在客户端硬盘中,即使浏览器关闭,这个值仍然存在,下次访问相应网站时,同样会发送到服务器上。

【2】使用URL附加信息的方式,也就是像我们经常看到JSP网站会有aaa.jsp?JSESSIONID=*一样的。这种方式和第一种方式里面不设置Cookie过期时间是一样的

【3】第三种方式是在页面表单里添加隐藏域,这种方式实际上和第二种方式一样,只不过前者通过GET方式发送数据后者是用POST方式发送数据,但是明显后者比较麻烦。

4,Cookie和Session区别

cookie存储在客户端(浏览器),session存储在服务端,简 单的说,当你登录一个网站的时候,如果web服务器端使用的是session,那么所有的数据都保存在服务器上面,客户端每次请求服务器的时候会发送 当前会话的sessionid,服务器根据当前sessionid判断相应的用户数据标志,以确定用户是否登录,或具有某种权限。由于数据是存储在服务器 上面,所以你不能伪造,但是如果你能够获取某个登录用户的sessionid,用特殊的浏览器伪造该用户的请求也是能够成功的。sessionid是服务 器和客户端链接时候随机分配的,一般来说是不会有重复,但如果有大量的并发请求,也不是没有重复的可能性。

cookie是属于session对象的一种,但有不同,Cookie不会占用服务器资源,是存在客户端内存或者一个cookie文本文件中,而“session”则会占用服务器资源,所以尽量不要使用session,而是用cookie,但我们一直认为cookie是不可靠的,session是可靠的,但是目前很多著名的站点都使用cookie,,有时候为了解决禁用cookie后的页面处理,通常采用url重写技术,调用session中大量有用的方法从session中获取数据后置入页面。

5,Cookie和Session的应用场景

Cookies的安全性能一直是倍受争议的。虽然Cookies是保存在本机上的,但是其信息的完全可见性且易于本地编辑性,往往可以引起很多的安全问题。所以Cookies到底该不该用,到底该怎样用,就有了一个需要给定的底线。

【1】session

登陆验证信息。一般采用Session(“Logon”)=true or false的形式。 用户的各种私人信息,比如姓名等,某种情况下,需要保存在Session里 需要在页面间传递 的内容信息,比如调查工作需要分好几步。每一步的信息都保存在Session里,最后在统一更 新到数据库

【2】cookie

判断用户是否登陆过网站,以便下次登录时能够直接登录。如果我们删除cookie,则每次登 录必须从新填写登录的相关信息。 另一个重要的应用是“购物车”中类的处理和设计。用户可能在一段时间内在同一家网站的不同 页面选择不同的商品,可以将这些信息都写入cookie,在最后付款时从cookie中提取这些信 息,当然这里面有了安全和性能问题需要我们考虑了。

6,使用cookie应遵循的原则

(1)不要保存私人信息。 (2)任何重要数据,最好通过加密形式来保存数据(最简单的可以用URLEncode,当然也可以用完善的可逆加密方式,遗憾的是,最好不要用md5来加密)。 (3)是否保存登陆信息,需有用户自行选择。 (4)长于10K的数据,不要用到Cookies。 (5)也不要用Cookies来玩点让客户惊喜的小游戏。

注:以上是公司最近面试总问的一个问题,发现很多工作四五年的回答的也不全面,所以从网上找了些资料

  

以上是关于Session和Cookie的区别与联系的主要内容,如果未能解决你的问题,请参考以下文章

Cookie和Session区别和联系详解

cookie和session的区别与联系

Session和Cookie的区别与联系,以及RedisHttpSession的使用

Session和Cookie的区别与联系

浅谈Session与Cookie的区别与联系

php session机制与cookie机制以及联系与区别