为什么需要cookie:HTTP是无状态协议,这就回出现这种现象:当你登录一个页面,然后转到登录网站的另一个页面,服务器无法认识到。或者说两次的访问,服务器不能认识到是同一个客户端的访问,这就让你重复登录,所以产生了cookie。
每个特定域名下面的cookie数量是有限制的,fixfox是50个,Opera是30个,chrome和safari是没有限制的
cookie:存储于访问者的计算机中的变量。每当同一台计算机通过浏览器请求某个页面时,就会发送这个 cookie。你可以使用 JavaScript 来创建和取回 cookie 的值。
特点: 1、cookie是不加密的 2、cookie是可以被篡改和攻击 3、cookie大小受到限制
作用:Cookies是一种能够让网站服务器把少量数据储存到客户端的硬盘或内存,或是从客户端的硬盘读取数据的一种技术。当你浏览某网站时,你硬盘上会生产一个非常小的文本文件,它可以记录你的用户ID、密码、浏览过的网页、停留的时间等信息。
当你再次来到该网站时,网站通过读取Cookies,得知你的相关信息,就可以做出相应的动作,如在页面显示欢迎你的标语,或者让你不用输入ID、密码就直接登录等等。从本质上讲,它可以看作是你的身份证。
Js中的使用:在js中操作cookie采用document.cookie获取用户传递给服务器的cookie值,返回的是一个字符串“key1=value1;key2=value2….”,解析该字符串获取想要的cookie值,若cookie值不存在,则返回空。
方法一:
方法二:
设置cookie值,直接用document.cookie="key1=value1;key2=value2…"不用担心之前的cookie值会被覆盖,此操作相当于addCookie(key,value),每个cookie值都是平行的。若设置的cookie键已经存在,则会修改之前的值。此外,还可以设置cookie的存储时间(expires)、访问权限(path)等,下面给一个demo
加参数存储时间
删除cookie只需要设置 expires 参数为以前的时间即可,如下所示,设置为 Thu, 01 Jan 1970 00:00:00 GMT,注:删除时不需要指明cookie的值。
其中,“path=/”设置cookie的访问权限,“/”表示全网络。默认页面的同目录下的其他页面及子目录下的页面都可以访问cookie。
“expires=”参数用于设置cookie的保存时长,单位ms,date.toGMTString()把时间转换成字符串。
另外,由于cookie是以字符串形式存储,可能会出现中文乱码问题,可以采用escape()和unescape()进行编码也解码。
jquery操作cookie
创建cookie:使用jQuery设置cookie非常简单。如,我们创建一个名为“example”,值为“foo”的cookie:
要设置cookie的有效期,可以设置expires值,如设置cookie的过期时间为10天:
设置cookie一小时后过期:
要设置cookie的保存路径,可以设置path值,如设置路径为根目录:
如果要设置路径为/admin,则:
获取cookie值:使用jQuery获取cookie的值的方法那是相当的简单,下面是弹出框显示名为“example”的cookie的值:
删除Cookie
使用jQuery删除cookie,只需要将cookie的值为null,注意如果设置值为空的字符串时,并不能删除cookie,只是将cookie值清空而已。
session:session依赖于cookie,因此当cookie被禁用,session也无法使用,存在于服务器的内存中,如果服务器重启就会丢失session同时需要重新登录。session是另一种记录客户状态的机制,客户端浏览器访问服务器的时候,服务器把客户端信息以某种形式记录在服务器上,这就是session。客户端浏览器再次访问时只需要从该session中查找该客户的状态就可以了。session相当于程序在服务器上建立的一份用户的档案,用户来访的时候只需要查询用户档案表就可以了。
实现过程
- 在服务器端生成全局唯一标识符
session_id
; - 在服务器内存里开辟此
session_id
对应的数据存储空间; - 将
session_id
作为全局唯一标示符通过cookie
发送给客户端; - 以后客户端再次访问服务器时会把
session_id
通过请求头中的cookie
发送给服务器; - 服务器再通过
session_id
把此标识符在服务器端的数据取出 - 如果客户端的浏览器禁用了
Cookie
怎么办?一般这种情况下,会使用一种叫做URL
重写的技术来进行会话跟踪,即每次HTTP
交互,URL
后面都会被附加上
Cookie和Session区别:
1、cookie数据存放在客户的浏览器上,session数据放在服务器上
2、cookie不是很安全,别人可以分析存放在本地的cookie并进行cookie欺骗,考虑到安全应当使用session
3、session会在一定时间内保存在服务器上,当访问增多,会比较占用你服务器的性能,考虑到减轻服务器性能方面,应当使用cookie
4、单个cookie保存的数据不能超过4K,很多浏览器都限制一个站点最多保存20个cookie
5、建议将登录信息等重要信息存放为session,其他信息如果需要保留,可以放在cookie中
6、session保存在服务器,客户端不知道其中的信息;cookie保存在客户端,服务器能够知道其中的信息
7、session中保存的是对象,cookie中保存的是字符串
8、session不能区分路径,同一个用户在访问一个网站期间,所有的session在任何一个地方都可以访问到,而cookie中如果设置了路径参数,那么同一个网站中不同路径下的cookie互相是访问不到的
9、Cookie支持跨域名访问,例如将domain属性设置为“.biaodianfu.com”,则以“.biaodianfu.com”为后缀的一切域名均能够访问该Cookie。跨域名Cookie如今被普遍用在网络中,例如Google、Baidu、Sina等。而Session则不会支持跨域名访问。Session仅在他所在的域名内有效。
10、Cookie中只能保管ASCII字符串,假如需求存取Unicode字符或者二进制数据,需求先进行编码。Cookie中也不能直接存取Java对象。若要存储略微复杂的信息,运用Cookie是比拟艰难的。而Session中能够存取任何类型的数据,包括而不限于String、Integer、List、Map等。Session中也能够直接保管Java Bean乃至任何Java类,对象等,运用起来十分便当。能够把Session看做是一个Java容器类。
总结:
session是存储在服务器的一次回话,不会永久存储,当用户回话结束(浏览器关闭)后,经过session的生命周期后,session会被销毁,且不能在不同的页面中共享,即使是同一个页面。所以很多时候不能用session存储用户信息。
cookie是存储在客户端(浏览器)的一种机制,永久存储,除非用户手动删除。每次用户向服务器请求的时候,都会携带本地存储的cookie。可以用cookie存储用户信息,设置的一些状态,跟踪用户行为等
sessionStorage、localStorage和cookie的区别
共同点:都是保存在浏览器端、且同源的
区别:
1、cookie数据始终在同源的http请求中携带(即使不需要),即cookie在浏览器和服务器间来回传递,而sessionStorage和localStorage不会自动把数据发送给服务器,仅在本地保存。cookie数据还有路径(path)的概念,可以限制cookie只属于某个路径下
2、存储大小限制也不同,cookie数据不能超过4K,同时因为每次http请求都会携带cookie、所以cookie只适合保存很小的数据,如会话标识。sessionStorage和localStorage虽然也有存储大小的限制,但比cookie大得多,可以达到5M或更大
3、数据有效期不同,sessionStorage:仅在当前浏览器窗口关闭之前有效;localStorage:始终有效,窗口或浏览器关闭也一直保存,因此用作持久数据;cookie:只在设置的cookie过期时间之前有效,即使窗口关闭或浏览器关闭
4、作用域不同,sessionStorage不在不同的浏览器窗口中共享,即使是同一个页面;localstorage在所有同源窗口中都是共享的;cookie也是在所有同源窗口中都是共享的
5、web Storage支持事件通知机制,可以将数据更新的通知发送给监听者
6、web Storage的api接口使用更方便