web会话管理基础

本文介绍了Web会话管理的基础知识,重点讨论了Cookie和HttpSession两种技术在解决用户数据保存问题上的应用。Cookie是客户端技术,受限于数量、大小限制,而HttpSession是服务器端技术,能为每个用户创建独享的对象,实现更灵活的数据存储。在使用HttpSession时,需要注意Bean实现Serializable接口以避免持久化错误。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


会话:会话可以理解为用户打开浏览器,点击多个超链接,访问服务器上的多个web资源,然后关闭浏览器,整个过程称为一个会话。


会话要解决的问题:每个用户在使用浏览器与服务器进行会话的过程中,不可避免各自会产生一些数据,程序要想办法为每一个用户保存这些数据,这就是会话要解决的问题。


解决会话问题的两种技术:

      Cookie:Cookie是客户端技术,程序把每一个用户的数据以cookie的形式写给用户各自的浏览器,当用户使用浏览器再次访问服务器中的web资源时,就会带着各自的数据

                       这样web资源处理的就是用户各自的数据。

                      * 一般浏览器对一个完整仅支持20个cookie,所以网站合计支持300个cookie,而且cookie大小不能超过4kb,且不能存中文数据。

                      *domain+path+name 唯一确定一个cookie

      常用API:public Cookie(String name, String value);

                        setValue() 、getValue()

                        setMaxAge()、getMaxAge()    单位:秒 (默认情况下,cookie被存储在浏览器线程中,浏览器关闭cookie小时,若想设置cookie长期有效,可以为cookie制定

                                                                                                 MaxAge,此时cookie就会被保存在浏览器缓存中)

                        setPath() 、 getPath()

                        setDomain()、getDomain()

                        getName() 


      HttpSession:Session是服务器端技术,利用这个技术,服务器在运行时可以为每一个用户的浏览器创建一个独享的HttpSession对象,由于session为用户浏览器独享,

                       所以用户在访问服务器的web资源时,可以把各自的数据放在各自的session中,当用户再去访问服务器中的web资源时,其他web资源再从各自的session中取

                       出数据为用户服务。

                       Session以基于Cookie的服务器端会话技术:


HttpSession对象的状态转换:

  



注:在编写bean的时候要注意实现Serializable接口,以防止bean对象在被放入session  的情况下,改sesion对象被持久化的时候报错。


@Override
	protected void doGet(HttpServletRequest req, HttpServletResponse resp)
			throws ServletException, IOException {
		
		resp.setContentType("text/html;charset=UTF-8");
		PrintWriter pw = resp.getWriter();
		
		//Get all cookies
		Cookie[] cookies = req.getCookies();
		//iterate cookies
		for(int i = 0; cookies!=null && i < cookies.length; i ++){
			Cookie cookie = cookies[i];
			if("lasttime".equals(cookie.getName())){
				String value = cookie.getValue();
				Date time  = new Date(Long.parseLong(value));
				SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
				String lasttime = sdf.format(time);
				pw.write(lasttime);
			}
		}
		
		/*
		 * delete cookie
		 * for(int i = 0; cookies!=null && i < cookies.length; i ++){
			Cookie cookie = cookies[i];
			if("lasttime".equals(cookie.getName())){
				cookie.setMaxAge(0);
				resp.addCookie(cookie);  
				break;
			}
			
			or 
			
			Cookie coo = new Cookie("lasttime","");
			coo.setMaxAge(0);
			resp.addCookie(coo);
		}*/
		
		
		
		//update last time
		Cookie coo = new Cookie("lasttime",System.currentTimeMillis() + "");
		coo.setPath(req.getContextPath());
		coo.setMaxAge(Integer.MAX_VALUE);
		resp.addCookie(coo);
		
	}





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值