Cookie会话管理
1、Cookie是指某些网站为了辨别用户身份、进行session跟踪而储存在用户本地终端上的数据(通常经过加密)。Cookie伴随着用户请求和页面在web服务器和浏览器之间传递,Cookie包含每次用户访问站点时web应用程序都可以读取的信息。
例如:用户打开浏览器点击多个链接或访问多个web资源之后,关闭浏览器,这个过程就是一个会话的过程。当下次再打开次链接或者访问该web资源时,浏览器就会知道以前访问过,这就称之为有状态的会话。
2、Cookie是保存字符串的,浏览器对它是有大小限制的 ,并且它会每次随着用户请求被发送到服务器,所以应该保证Cookie值不要太大,一般限制cookie大小为4K。浏览器一般只存放300Cookie。
3、保存会话的两种技术
(1)、Cookie
Cookie是客户端技术,程序员用程序把每个用户的数据以Cookie的形式写给用户各自浏览器。如果用户再次用浏览器访问服务器中的web资源时,就会带着各自的数据直接去访问,web资源处理的就是用户自己的信息数据。
(2)、Session
Session是服务器端技术,当服务器在运行的时候可以为每个用户的浏览器创建一个其独享的Session对象,所以用户在访问服务器的web资源的时候,可以把各自的数据存放在各自独享的Session中去,每当用户再次访问服务器中的其他web资源时,其他web资源再从用户各自的Session中取出数据为用户服务。
4、设置Cookie的有效时间
Cookie的有效期是指:设置Cookie的最大保存时间。
(1)、当服务器给浏览器送一个cookie时,如果在服务器端没有调用setMaxAge方法设置Cookie的有效期,那么cookie的有效期只在一次会话过程中有效。当用户关闭浏览器时,会话就会结束,cookie也就失效了。
(2)、如果在服务器端调用了setMaxAge方法设置的cookie有效期,如30分钟,那么当服务器把cookie发送给浏览器时,cookie就会在客户端的硬盘上存储30分钟,即使浏览器关闭了,cookie依然存在,在这30分钟之内,再次打开浏览器访问服务器时,浏览器就会把cookie值一起带上,就可以在服务器端获取客户端浏览器传过来的cookie里面的用户数据信息。
Cookie.setMaxAge(30*60); //设置cookie的有效期为30分钟
(3)、request接口中定义了一个getCookie方法,主要是获取客户端提交的Cookie。
Cookie[ ] cookies = request.getCookie(cookie); //获取浏览器访问服务器 时传递过来的cookie数组
5、Cookie中可以存取中文
(1)、在cookie中存储中文时,必须进行中文转码,使用的是URLEncoder类中的encode()方法进行转码。
Cookie cookie = new Cookie(“uername”,URELEncoder(“大学”,”UTF-8”));
(2)、获取cookie中的中文数据时,必须进行解码操作,使用的是URLDecoder类中的decode()方法进行解码。
URLDecoder.decode(cookies[i].getValue(),”UTF-8”);