Web服务器和HTTP服务器是无状态的,因此当Web服务器将网页发送到浏览器时,连接断开,服务器会忘记与用户相关的一切。那么浏览器和网络服务器是如何记住用户信息的呢?Cookies就是为了解决这个问题而发明的。当用户访问网页时,他们的姓名、唯一ID或任何其他信息都可以存储在浏览器cookie中。下次用户返回页面时,cookie将记住他们的姓名或唯一ID。Cookies只是存储在您计算机浏览器中的小文本文件。它们包含以下数据:保存数据的名称-值对cookie过期的日期应将其发送到的服务器的域和路径Cookie也有一些值得一提的限制:每个cookie的最大大小为4096字节最大值每个域20个cookie(每个浏览器略有不同)cookie对其自己的域是私有的(一个网站不能从其他域读取cookie,只能读取它自己的)大小限制适用于整个cookie,而不仅仅是它的值在浏览器中,cookie通过DOM公开为document.cookies。下面我们将介绍如何使用JavaScript在浏览器中设置、获取、更新和删除cookie数据。创建Cookie使用JavaScript在浏览器中设置cookie非常简单!我会在下面告诉你。(1)设置Cookie以下是在浏览器中用JavaScript新建cookie的执行代码:document.cookie="userId=nick123"Chrome)或Storage(Firefox)找到cookie。(2)设置cookie的过期时间。也可以给cookie加上过期时间(UTC),告诉浏览器什么时候删除它:document.cookie="userId=nick123;expires=Wed,15Jan202012:00:00UTC"(3)设置cookie路径可以同时告诉浏览器cookie所属的路径(默认值为当前页面的路径):document.cookie="userId=nick123;expires=Wed,15Jan202012:00:00UTC;path=/user"(4)设置cookie域最后要介绍的数据是cookie所属的域(默认为当前域):document.cookie="userId=nick123;expires=Wed,15Jan202012:00:00UTC;path=/user;domain=mysite.com"ReadCookies通过document.cookie对象,用JavaScript读取cookies也很简单:(1)读取单个页面的所有cookies获取单个页面的所有cookies作为一个string,并为每个由以下内容分隔的cookie使用分数:constcookies=document.cookie(2)读取具有特定名称的cookie要访问具有特定名称的cookie,我们需要获取所有cookies在页面上并解析字符串,然后查找与我们要查找的cookie名称匹配的项。这是一个使用正则表达式完成此操作的函数:functiongetCookieValue(name){letresult=document.cookie.match("(^|[^;]+)\\s*"+name+"\\s*=\\s*([^;]+)")returnresult?result.pop():""}你像这样使用这个函数:getCookieValue("userId")//returnsnick123这将返回与提供给函数字符串值。如果你还没有掌握正则表达式,还有一个功能相同的函数:functiongetCookieValue(name){constnamenameString=name+"="constvalue=document.cookie.split(";").filter(item=>{returnitem.includes(nameString)})if(value.length){returnvalue[0].substring(nameString.length,value[0].length)}else{return""}}以同样的方式使用这个函数:getCookieValue("userId")//returnsnick123UpdateCookies你可以通过用新值覆盖它来创建cookie来改变它的值。您可以使用以下代码覆盖本文前面创建的cookie“userId”:document.cookie="userId=new_value"当您再次运行getCookieValue函数时,将返回新值:getCookieValue("userId")//returnsnew_valueDelete您可以提供的Cookie通过设置空值并将其到期日期设置为过去的任意时间来删除cookie。如果我们想删除前面示例中的cookie“userId”,请按照以下步骤操作:document.cookie="userId=;expires=Thu,01Jan197000:00:00UTC;"很简单,对吧?
