Cookie
cookie是客户端在访问web服务器时,服务器在客户端的机器上存放的信息。
服务器将Cookie保存在客户机器上的原因是为了跟踪客户的状态。这主要用于特殊的场合如电子商务。JavaServletApi为Cookie提供了简单实现,javax.servlet.http.Cookie类表示Cookie。
Cookie保存客户端的硬盘上,通过key和value值来保存信息,类似于Map。
Cookie的key和value
不能使用中文。如果要保存中文,必须使进行编码。
Session
会话(Session)是指在一段时间内,用户使用同一个浏览器进程与Web应用之间的交互过程。
会话(Session)通常用来跟踪用户的状态,缓存用户在此浏览器进程中的信息。
当用户关闭浏览器,上一个Session也就无法再次获得了(Cookie的maxAge为-1的情况)。再次打开新的浏览器,将开始一个新的会话。
服务器给每个用户创建一个会话,即HttpSession对象,保存在服务器端。
类javax.servlet.http.HttpSession。每一个HttpSession代表用户的一个会话。
每一个Session的过期时间默认为30分钟。
IE表示客户端
当客户端第一次请求服务器时,服务器就会给用户分配一个唯一的会话标识,即JESSIONID。然后以Cookie的形式返回给用户。用户这边就保存了一个cookie。
下图是一个响应头:
而服务器要跟客户端保持对话,所以服务器中保存了一个相同JESSIONID的session。当浏览器再次访问服务器,
下图是在浏览器中随意点的一个链接。
可以看到,有一个Cookie属性。因为已经不是第一次访问该服务器,所以当浏览器再次访问服务器时,会携带包含了jsessionid的cookie访问服务器。服务器根据此id返回此用户的HttpSession对象,就保持了会话。
所以,我们可以知道Cookie是保存在客户端,Session是服务器自己保存。Session
状态信息保存在服务器端。这意味着安全性更高。