这里是修真学院的前端小课堂。每篇文章分享自【背景介绍】【知识分析】【常见问题】【解决方案】【编码实践】【扩展思考】【更多讨论】【参考文献】从八个方面深度剖析前端知识/技能。本文分享:【Session和Cookie的区别】一、背景介绍什么是CookieCookie是HTTP协议下,服务器或脚本可以维护客户端工作站信息的一种方法。Cookie是网络服务器保存在用户浏览器(客户端)上的一个小文本文件(内容通常是加密的),其中可以包含用户的相关信息。每当用户连接到服务器时,Web站点都可以访问Cookie信息,可以将其视为浏览器缓存。什么是SessionSession的定义很抽象,不同的场合session这个词的含义也大不相同。它可以表示服务器和浏览器之间的一个会话过程,是指从浏览器窗口打开到关闭的这段时间。它也可以用来指代用于维护客户端和服务器之间状态的一类解决方案。二、知识分析Cookie机制Cookies需要解决三个问题:分发、内容和使用。Cookie的分发是通过扩展HTTP协议实现的,服务器通过在HTTP响应中加入一行特殊指令来提示浏览器生成相应的Cookie。cookie的内容主要包括name(名称)、value(值)、maxAge(过期时间)、path(路径)、domain(域)和securename:cookie的名称,一旦创建,名称不可更改。值:cookie的值。如果该值是Unicode字符,则需要对其进行字符编码。如果是二进制数据,则需要使用BASE64编码。maxAge:cookie过期时间,单位秒。如果为正,则cookie在maxAge后过期。如果为负数,则该cookie为临时cookie,关闭浏览器即失效,浏览器不会以任何形式保存该cookie。如果为0,表示删除cookie。默认值为-1path:用于此cookie的路径。如果设置为“/sessionWeb/”,则只有ContextPath为“/sessionWeb/”的程序才能访问cookie。如果设置为“/”,则该域名下的ContextPath可以访问cookie。域:领域。可以访问cookie的域名。第一个字符必须是“.”,如果设置为“.google.com”,则所有以“google.com”结尾的域名都可以访问该cookie,如果不设置,所有域名都是安全的:cookie是否是Onlytransmittedusing安全协议。cookies的使用是浏览器根据一定的原则在后台自动发送给服务器的。浏览器检查所有存储的cookie。如果cookie声明的作用范围大于或等于所请求资源的位置,它会将cookie附加到所请求资源的HTTP请求头中,并发送给服务器。会话机制会话机制是一种服务器端机制,服务器端使用类似于哈希表的结构来存储信息。当程序需要为客户端的请求创建会话时,服务器首先检查客户端的请求是否已经包含会话ID——sessionID。如果已经包含了sessionID,说明客户端已经创建了session,服务端根据sessionID获取session(如果获取不到,可能会创建一个新的),如果客户端请求没有不包含sessionID,则为该客户端创建一个session,并声明一个与该sessionsessionID相关联的session,sessionID的值应该是一个既不重复又不易被模仿的字符串(服务端会自动创建)).这个sessionID会在这个response中返回给client保存。方式1保存sessionID,使用Cookie。此时Cookie不再用于认证,而是作为存储sessionID2的载体,URL重写:因为可以人为禁止cookies,为了保证sessionID能够传递给服务器,使用URL重写也是一个workaround.比如href="<%=response.encodeURL("index.jsp")%>"写完后,url是这样的href="index.jsp;jsessionid=0CCD096E7F8D97B0BE608AFDC3E1931E"3、隐藏表单提交。把sessionId放在hidden中其实这些方法中最方便的就是cookies了。其他两种方法各有缺点。URL重写的缺点是所有的URL都要重写,非常麻烦。表单隐藏字段的缺点是只能限制表单提交,如果是简单的文本链接,则无法提供会话跟踪。Cookie和Session的区别1.Cookie数据保存在客户的浏览器中(本地),session数据保存在服务器端。2.Cookie不如session安全,其他人可以分析本地保存的cookie,进行cookie欺骗,所以应该使用Session3。为了安全起见,Session会在服务器上保存一定时间。当访问量增加时,会占用更多的服务器资源,所以出于性能的考虑,应该使用cookies。单个cookie保存的数据不能超过4k。许多浏览器限制站点最多保存20个cookie。其实出于性能的考虑,无论是cookie还是session,里面的信息都应该是短小精悍的。由于session是保存在服务器上的,所以不支持跨域访问。3、扩展思考使用cookies和session的具体场景。比如姓名、电话号码等,应该放在Session中。Cookies用于用户登录网站时的自动登录和类似“购物车”的处理。使用cookies保存信息时,最好以加密形式保存数据,是否保存登录信息需要用户自己选择4.参考文献参考1:CookieSession机制详解参考2:说说区别和ConnectionsBetweenSessionandCookie入门,学习路上不再迷茫。这里是技能树。IT修真:http://www.jnshu.com,初学者转互联网行业的聚集地。”欢迎加入IT交流群565734203与大家一起探讨交流
