Web应用程序是使用HTTP协议传输数据的。HTTP协议是无状态的协议。一旦数据交换完毕,客户端与服务器端的连接就会关闭,再次交换数据需要建立新的连接。这就意味着服务器无法从连接上跟踪会话。
简单的来说,即使用户第一次和服务器连接后并且登录成功,再次请求服务器时,服务器依然不知道当前请求是哪个用户。
因此,为了解决上述的问题,要跟踪该会话,必须引入一种机制。于是有了cookie和session的出现。
cookie
cookie位于用户的计算机上,用来维护用户计算机中的信息,直到用户删除。
用户第一次登录后服务器返回一些数据(cookie)给浏览器,浏览器保存在本地。当该用户发送第二次请求的时候,浏览器自动把上次请求存储的cookie数据自动携带给服务器,服务器通过浏览器携带的数据来判断当前用户身份。
1、cookie具有不可跨域名性。
根据Cookie规范,浏览器访问Google只会携带Google的cookie,而不会携带Baidu的Cookie。Google也只能操作Google的Cookie,而不能操作Baidu的Cookie。
2、cookie的内容主要包括:名字,值,过期时间,路径和域。路径与域一起构成cookie的作用范围。
3、cookie可以设置过期时间,不设置cookie的过期时间时,则表示这个cookie的生命期为浏览器会话期间,关闭浏览器窗口,cookie就消失。
session
session称为会话信息,位于服务器上,当用户通过浏览器发送请求时,服务器收到请求的信息并与访问信息进行匹配, 当关闭网站时就表示会话已经结束,网站无法访问该信息了,所以它无法保存永久数据,我们无法访问以及禁用网站。
session会在一定时间内保存在服务器上,影响服务器性能,数据量大时可能导致服务器内存溢出。
cookie 和session 的区别
1、cookie数据存放在用户的浏览器的文本文件,session数据存在服务器的内存中。
2、cookie可被修改和删除,不如session安全。
3、单个cookie保存的数据不能超过4K,大部分浏览器都限制一个站点最多保存20个cookie。
cookie和session结合使用
目前市场或企业里一般有两种存储方式:
1、存储在服务端
通过cookie存储session_id,具体的数据则保存在session中。用户登录后,服务器在cookie中保存session_id,再次请求时自动携带session_id,服务器根据session_id在session库中获取用户的session数据并判断用户数身份,术语上称作server side session。
2、将session数据加密,存储在cookie中。术语上称作client side session。