cookie和session的由来:
cookie
1.cookie,因为http是无状态协议,意思是说当你浏览一个页面,然后转到同一个网站的另一个页面,服务器是无法认识到的,每一次的访问都是没有任何关系的。这就容易引起混乱,比如上一次我登陆了,下一次访问,又让我登录,很烦。
2.cookie的想法是,当访问一个页面的时候,服务器在http报文中,命令浏览器存储一个字符串;浏览器在访问同一个域的时候,会把这个字符串携带在http请求中;
第一次访问一个服务器,不可能携带cookie。必须是服务器得到这次请求,在下行响应报头中,携带cookie信息,此后每一次浏览器往这个服务器发出的请求,都会携带这个cookie。
特点
● cookie是不加密的,用户可以自由看到;
session
1.session依赖cookie,当一个浏览器禁用cookie的时候,登录效果消失; 或者用户清除了cookie,登陆也消失。
session比cookie不一样在哪里呢? session下发的是乱码,并且服务器自己缓存一些东西,下次浏览器的请求带着乱码上来,此时与缓存进行比较,看看是谁。
所以,一个乱码,可以对应无限大的数据。
任何语言中,session的使用,是“机理透明”的。他是帮你设置cookie的,但是足够方便,让你感觉不到这事儿和cookie有关。
session是什么
session 是一种标识对话的技术说法。通过 session ,我们能快速识别用户的信息,针对用户提供不一样的信息。
session 的技术实现上:会对一次对话产生一个唯一的标识进行标识。
session 生命周期
session 标识产生的时机和清除时机:
session 特点
每次对话, session 的 id 是不一样的。
session id 需要每次请求都由客户端带过来,用来标识本次会话。这样就要求客户端有能用保存的 sesssionId。
从 session 开始到清除,我们叫一次会话,也就是生成 session。
session 技术方案
当前业界通用的方案是:cookie 。当然还有无 cookie 的方案,对每个链接都加上 sessionId 参数。
session 使用流程
用户登录后,将 sessionId 存到 cookie 中。
用户在请求的网站别的服务时,由浏览器请求带上 cookie,发送到服务器。
服务器拿到 sessionId 后,通过该 Id 找到保存到在服务器的用户信息。
然后再跟据用户信息,进行相应的处理。
浏览器的缓存机制提供了可以将用户数据存储在客户端上的方式,可以利用cookie,session和服务端进行数据交互
session和cookie的区别
cookie | session | |
---|---|---|
保持状态 | 保存在浏览器 | 保存在服务器端 |
使用方式 | 当用户在某个网站注册后,就会收到一个惟一用户ID的cookie。客户后来重新连接时,这个用户ID会自动返回,服务器对它进行检查,确定它是否为注册用户且选择了自动登录,从而使用户无需给出明确的用户名和密码,就可以访问服务器上的资源。 | a.当服务器收到请求需要创建session对象时,首先会检查客户端请求中是否包含sessionid。b.如果有sessionid,服务器将根据该id返回对应session对象。如果客户端请求中没有sessionid,服务器会创建新的session对象,并把sessionid在本次响应中返回给客户端。c.通常使用cookie方式存储sessionid到客户端,在交互中浏览器按照规则将sessionid发送给服务器。如果用户禁用cookie,则要使用URL重写,可以通过response.encodeURL(url) 进行实现; |
生命周期 | a.如果不在浏览器中设置过期时间,cookie被保存在内存中,生命周期随浏览器的关闭而结束,这种cookie简称会话cookie。b.如果在浏览器中设置了cookie的过期时间,cookie被保存在硬盘中,关闭浏览器后,cookie数据仍然存在,直到过期时间结束才消失。 | 1.用户已经登录:这个唯一标识会在用户登录时产生,用户点击退出时或者关闭浏览器时清除。2.用户未登录: 这个唯一标识会用用户进入网站时产生,用户关闭所有网站相关页面时清除。3.session 生命周期: 在生成和清除之间,在网站内的页面任意跳转,session 标识不会发生变化。 |
摘自:http://www.cnblogs.com/envenler/archive/2011/06/16/2082387.html
https://www.jianshu.com/p/310d307e44c6