HTTP是无状态的请求/响应连接,导致连接断开后,再次连接服务器无法识别用户。
什么是无状态?
你先向服务器发送请求,建立TCP连接将请求发送过去,然后给我响应,TCP连接断开。在这一过程中没有做任何的保存,没有留下任何的痕迹。当你再一次访问的时候,需要重新的建立TCP连接,发送请求等操作。
方法一、跟踪客户端IP地址,但是很多地方的客户端都是动态的生成IP,因此服务器无法区分是不是同一个人。
方法二、借助http首部放置用户身份信息。如referer、e-mail。referer的用法是:大概可以知道是从哪一个相关的网站来的,然后可以推荐相关的信息。用e-mail不好之处是知道了用户的邮箱地址,然后可以给用户散发垃圾邮件。
方法三、胖URL(就是在URL后面添加许多许多的参数,导致URL会变得很长),在URL中嵌入识别信息(即通过URL中的参数信息识别是哪一个用户)。它的不好之处是比较丑陋,无法共享URL(因为每一个用户都会生成不同的URL),非持久(因为是放到URL连接中的,浏览器关闭之后,访问过的数据无法存储下来)等。
方法四、cookie(普遍采用它),在客户端存储用户标识信息。识别用户、持久化最好的方式。
1.会话cookie(临时cookie),不设置过期时间,则表示这个cookie生命周期为浏览器会话期间,只要关闭浏览器窗口,cookie就消失了。(用户退出浏览器时,会话cookie就被删除了,它是没有缓存时间的。)注意:会话cookie一般不保存在硬盘上而是保存在内存里。
2.持久cookie,存储在硬盘上,浏览器退出计算机重启时仍然存在。可以维护用户周期性访问的站点,它是有缓存时间的。
注意:设置了过期时间,浏览器就会把cookie保存到硬盘上,关闭后再次打开浏览器,这些cookie依然有效直到超过设定的过期时间。
存储在硬盘上的cookie可以在不同的浏览器进程间共享,比如两个IE窗口。而对于保存在内存的cookie,不同的浏览器有不同的处理方式。
1.Name:是Cookie的名称;
2.Value:是Cookie的值;
3.Domain:是可以访问该Cookie的域名(相同的域名或者父域下的所有子域都是可以访问的,如domain设置为baidu.com,那么baidu.com下的网页以及baidu.com下的子网页都可以访问到的);
4.Path:可以访问此Cookie的页面路径(如path是/abc,那么表示只有/abc路径下的页面可以读取此Cookie);
5.Expires/Max-Age:是用来设置时间的(之前的版本叫Expires,后来的版本叫Max-Age)不同浏览器表示的形式有可能是不一样的;
注意:只要时间是比当前时间靠前的cookie就是一个临时cookie。
6.Size:是Cookie的大小(注意:一般Cookie都是做标识的,因此它一般都比较小)
7.HTTP:Cookie的httponly属性。若此属性为true,则只有在http请求头中会带有此cookie的信息,而不能通过document.cookie来访问此cookie;
8.Secure:设置是否只能通过https来传递此条cookie。
由于cookie主要是用来标识的,因此不会太大,因此每一个浏览器设置的cookie大小大概是4K字节左右。
cookie的增、删、改、查
例如:
1 | document.cookie = "user=12345"; |
1 | var oDate = new Date(); |
1 | // 假设cookie上面已经存在了一个“user=12345”的值,先来我们来对它进行一个修改 |
1 | document.cookie; |
1 | let manageCookie = { |