cookies和session这两个东西经常会在面试当中问到,算是比较基础的知识,但是还是需要做一下深入理解。
Session
-
Session的概念
Session:在计算机中,尤其是在网络应用当中,被称为“会话控制”。Session
对象存储特定用户会话所需的属性及配置信息。当程序需要为某个客户端的请求创建一个session时,服务器首先检查这个客户端的请求里是否已包含了一个session标识(称为SessionID),如果已包含则说明以前已经为此客户端创建过session,服务器就按照SessionID把这个session检索出来使用(检索不到,会新建一个),如果客户端请求不包含SessionID,则为此客户端创建一个session并且生成一个与此session相关联的SessionID,SessionID的值应该是一个既不会重复,又不容易被找到规律以仿造的字符串,用来唯一标识session,这个SessionID将会在本次响应中返回给客户端保存。
-
Session的生命周期
Session保存在服务器端,为了获取更高的存取速度,服务器一般会把Session放在内存里面,每个用户都会有一个独立的Session。如果Session里面的内容太过复杂,当大量的用户访问服务器时,可能会导致内存溢出,所以我们的Cookie内容应当适当的精简。当我们第一次访问服务器时,服务器会给我们自动创建一个Session,生成session后,只要用户继续访问,服务器就会更新session的最后访问时间,并且维护这个session。当用户访问服务器一次,无论是否读写了session,服务器都会认定这个session活跃(active)了一次。当越来越多的用户访问我们的服务器时,因此我们的session会越来越多。为了防止内存溢出,服务器会把长时间没有活跃的Session删除。这个时间就是session的超时时间,过了超时时间,我们的session就会自动失效
Cookie
-
Cookie概念
Cookie 可以翻译为“小甜品,小饼干” ,Cookie在网络系统中几乎无处不在,当我们浏览以前访问过的网站时,网页中可能会出现 :你好XXX,这会让我们感觉很亲切,就好像吃了一个小甜品一样。这其实是通过访问主机中的一个文件来实现的,这个文件就是 Cookie。在Internet 中,Cookie 实际上是指小量信息,是由 Web服务器创建的,将信息存储在用户计算机上的文件。一般网络用户习惯用其复数形式 Cookies,指某些网站为了辨别用户身份、进行Session 跟踪而存储在用户本地终端上的数据,而这些数据通常会经过加密处理。 -
Cookie的不可跨域名性
很多网站都会使用cookie,不同浏览器采用不同的方式保存Cookie,而且每个网站的Cookie只能够被对应的网站使用。意思就是说当浏览器访问Baidu时,只会带Baidu的cookie,而不会带其他网站的Cookie,这就是Cookie的不可跨域名性。
Cookie在客户端是由浏览器来管理的。浏览器可以保证各个网站只能操作各个网站的Cookie,从而保证用户的隐私安全。 -
Cookie的内容
cookie的主要内容包括名字,值,过期时间,域和路径。域和路径一起构成cookie的作用范围。cookie如果不设置过期时间的话,则表示这个cookie的生命期为浏览器会话期间,关闭浏览器,这个cookie就会消失。这种生命期为浏览器会话期的Cookie被称为会话cookie。会话Cookie一般不保存在硬盘上而是保存在内存里,这种行为并不是规范规定的。如果Cookie设置了过期时间,浏览器就会把cookie保存到硬盘上,即使浏览器关闭了,这些cookie还是会一直有效直到过了过期时间。 -
Cookie的修改和删除
Cookie并没有提供修改和删除操作,要想修改某一个Cookie只需要新建一个同名的Cookie,添加到请求里面去覆盖原来的Cookie。删除也是如此,只需要将要删除的Cookie的过期时间设置成现在时间的之前就可以了,然后再覆盖原来的Cookie。需要注意的是:要修改的和要删除Cookie的名字(name),域名(domain)和路径(Path)等除了值(value)和过期时间这两个属性之外必须和原来完全一样。否则,浏览器就会将请求里面的Cookie设为新的Cookie,相当于覆盖失败,也就是删除和修改失败了。
Session和Cookie的区别
- cookie数据存放在客户端,session数据放在服务器上。
- cookie不是很安全,别人可以分析存放在本地的Cookie并进行Cookie欺骗考虑到安全应当使用session。
- session会在一定时间内保存在服务器上。当访问增多,会比较占用你服务器的性能考虑到减轻服务器性能方面,应当使用Cookie。
- 单个Cookie保存的数据长度不能超过4K,很多浏览器都限制一个网址最多保存20个cookie。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。