cookie与session

cookie

“Cookie”是小量信息,由服务器端生成,发送给User-Agent(一般是浏览器),浏览器会将Cookie的key/value保存到某个目录下的文本文件内,从而下次这位独一无二的访客又回到该服务器时,可从该浏览器读回此信息。让浏览器记住这位访客的特定信息,如上次访问的位置、花费的时间或用户首选项(如样式表),这是很有用的。

Cookie 是个存储在浏览器目录的文本文件,当浏览器运行时,存储在 RAM 中。一旦你从该网站或网络服务器退出,Cookie 也可存储在计算机的硬驱上。

Cookie把少量的信息存储在用户自己的电脑上,它在一个域名下是一个全局的,只要设置它的存储路径在某个域名下 ,那么当用户用浏览器访问时,就可以从这个域名的任意页面读取Cookie中的信息。

如果在一台计算机中安装多个浏览器,每个浏览器都会在各自独立的空间存放cookie。因为cookie中不但可以确认用户,还能包含计算机和浏览器的信息,所以一个用户用不同的浏览器登录或者用不同的计算机登录,都会得到不同的cookie信息,另一方面,对于在同一台计算机上使用同一浏览器的多用户群,cookie不会区分他们的身份,除非他们使用不同的用户名登录。

一般Cookie的本地存储大小为4k。

Cookie是怎样工作的?

一般来说,Cookie通过HTTP Headers从服务器端返回到浏览器上。

首先,服务器端在响应中利用Set-Cookie header来创建一个Cookie ,这个含有Cookie值的HTTP Header被保存到浏览器的Cookie文件后,Header就通知浏览器将Cookie通过请求返回到服务器,完成浏览器的认证操作。

浏览器创建了一个Cookie后,对于每一个针对该网站的请求,都会在Header中带着这个Cookie;不过,对于其他网站的请求Cookie是绝对不会跟着发送的。而且浏览器会这样一直发送,直到Cookie过期为止。

我们一般不会在cookie中存储大量的数据,原因如下:

     1. 容量太小,一般浏览器中的cookie容量只有4K,转成中文也就是几千个汉字。

     2. 由于每次请求都会携带cookie信息,所以会影响传输效率,访问速度!

Cookie 有哪些用途?

Cookie 的用途之一是存储用户在特定网站上的密码和 ID。另外,也用于存储起始页的首选项。在提供个人化查看的网站上,将要求你的网络浏览器利用你计算机硬驱上的少量空间来储存这些首选项。这样,每次你登录该网站时,你的浏览器将检查你是否就该唯一的服务器有任何预先定义的首选项(cookie)。如果有的话,浏览器将此 cookie 随你对网页的请求一起发送给服务器。

网站个人化是 cookie 最有益的用途之一。例如,当谁来到 CNN 网站,但并不想查看任何商务新闻。网站允许他将该项选为关闭选项。从那时起(或者直到 cookie 逾期),他在访问 CNN 网页时将不会读到商务新闻。

session

由于Cookie 存在于用户端,而且它本身存储的尺寸大小也有限,最关键是用户可以是可见的,并可以随意的修改,很不安全。为了安全,方便的全局读取信息,于是一种新的存储会话机制:Session 诞生了。

Session在计算机中,尤其是在网络应用中,称为“会话控制”。Session 对象存储特定用户会话所需的属性及配置信息。这样,当用户在应用程序的 Web 页之间跳转时,存储在 Session 对象中的变量将不会丢失,而是在整个用户会话中一直存在下去。当用户请求来自应用程序的 Web 页时,如果该用户还没有会话,则 Web 服务器将自动创建一个 Session 对象。当会话过期或被放弃后,服务器将终止该会话。

Session的信息保存在服务器端,Session的id保存在客户机的Cookie中。所以,Session仅在支持 Cookie 的浏览器中使用。 

一个Session的概念需要包括特定的客户端,特定的服务器端以及不中断的操作时间。A用户和C服务器建立连接时所处的Session同B用户和C服务器建立连接时所处的Session是两个不同的Session。

当客户端发起一个HTTP请求时,如果有开启Session,就会自动生成一个session_id 来标注是这次会话的唯一ID,同时也会自动往cookie里写入一个变量,它的值正是session_id,当这次会话没结束,再次访问的时候,服务器会去读取这个变量里的session_id是否有值、有没有过期,如果能够读取到未过期的session_id,则继续使用,如果没有,就会新生成一个session_id,同时在cookie中生成新的变量来标志session_id。由于默认生成的这个变量是会话,也就是说关闭浏览器就会过期掉,所以,下次重新浏览时,会重新生成一个session_id。

Session存储位置是在服务器端。一般为了防止在服务器的内存中保存过多的无用的Session(为了高速存取),Sessinon只在用户第一次访问服务器时创建(除非其失效),需要注意只有访问JSP、Servlet等程序时才会创建Session,只访问HTML、IMAGE等静态资源并不会创建Session,可调用request.getSession(true)强制生成Session。

差别

生命周期

  • 服务器会把长时间没有活动的Session从服务器内存中清除,此时Session便失效。Tomcat中Session的默认失效时间为20分钟。Session是从无操作开始计时,它的生命周期由服务器管理,它从用户最后一次操作时间开始记时。
  • Cookie在生成时就会被指定一个Expire值,这就是Cookie的生存周期,在这个周期内Cookie有效,超出周期Cookie就会被清除。 Cookie是从Cookie文件生成开始计时,它的生命周期是由浏览器来管理的,设置完了,和用户操不操作没关系。可以不设Cookie的生命周期,那他的生命周期就在应用结束(一般为浏览器关闭)的时候结束。

存储地点

  • Session保存在服务器,客户端不知道其中的信息。
  • Cookie保存在客户端,服务器能够知道其中的信息。

存储格式

  • Session中保存的是对象。
  • Cookie中保存的是字符串。 

存储时长

  • Session在用户会话结束后就会关闭。
  • Cookie保存在客户端,可以长期保存。

访问渠道

  • Session不能区分路径,同一个用户在访问一个网站期间,所有的Session在任何一个地方都可以访问到。
  • Cookie中如果设置了路径参数,那么同一个网站中不同路径下的Cookie互相是访问不到的。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值