session机制、cookie机制
一、Cookie机制
在web程序中是使用HTTP协议来传输数据的,因为http是无状态协议,一旦数据交换完毕,客户端和服务器端的连接就会关闭,再次交换数据需要建立新的连接,所以无法实现会话跟踪,cookie技术则弥补了这一缺陷。
cookie实际上一段的文本信息,客户端请求服务器。如果服务器需要记录该用户的状态,就使用response向客户端浏览器颁发一个cookie。客户端浏览器会把cookie保存起来。当浏览器再请求该网站时,浏览器把请求的网址连同该cookie一同提交给服务器。服务器检查该cookie,以此来辨认用户的状态。服务器还可以根据需要修改cookie的内容。
cookie生命周期:
cookie的maxAge决定cookie的生命周期,单位为秒(second)。cookie通过getMaxAge()方法和setMaxAge()方法来获得maxAge属性,如果maxAhe属性为正,则表示cookie会在maxAge秒之后自动失效。如果maxAge属性为负,则说明cookie仅在本浏览器窗口和本窗口打开的子窗口下有效,关闭窗口cookie则失效。maxAge的默认值是-1当maxAge的值为0时,表示删除cookie。
Cookie cookie = new Cookie("username","ainimomoda");
cookie.setMaxAge(Integer.Max_Value);//设置生命周期为Max_Value
response.addCookie(cookie);//输出到客户端
二、Session机制
session也是一种记录客户状态的机制,不同的是cookie保存在客户端浏览器中,而session保存在服务器上。客户端浏览器访问服务器是时候把客户端信息以某种形式记录在服务器上,这就是session中查找该客户的状态。
session生命周期:
session保存在服务器端,为了获得更高的存取速度,服务器一般把session放在内存。每个用户都会有一个独立的session,如果session内容过于复杂,当大量客户访问服务器时可能会导致内存溢出。
session在用户第一次访问服务器的时候自动创建,需要注意只有访问JSP,Servlet等程序时才会创建session;只要访问HTML、IMAGE等静态资源不会创建session。如果尚未生成session,可以使用request.getSession(true)强制生成session。
session生成后,只要用户访问,服务器就会更新session的最后访问时间,并维护该session。用户每访问服务器一次,无论是否续写session服务器都认为该用户的session活跃(active)了一次。
Session对应的类是javax.servlet.http.HttpSession,每一个访问者都对应一个session对象,并将其状态信息保存在这个session对象中,session对象的创建是在用户第一次访问服务器时产生的。
HttpSession session = request.getSession();//获取session对象
session.setAttribute("username",zhangsan);//设置session属性
out.println(session.getAttribute());//获取session属性
三、cookie和session的区别:
1. cookie数据放在客户端浏览器,session放在服务器;
2. cookie没有session安全;
3. session会在一定时间保存在服务器上,所以会占用服务器内存;