`
86asm
  • 浏览: 199989 次
  • 性别: Icon_minigender_1
  • 来自: 成都
社区版块
存档分类
最新评论

多个浏览器窗口共享购物车、登录用户

阅读更多

         思路:session中记录登录用户、购物车。再把sessionId加进cookie中。当程序判断是否登录时,会首先从session中取购物车对象,如果取不到,再通过cookie取出sessionId,再根据这个sessionId取出session。因而问题的关键在于如何保存session,当然最好的的方式是通过监听器来保存,代码如下:

package com.asm.base.listener;

import java.util.LinkedHashMap;
import java.util.Map;

import javax.servlet.http.HttpSession;
import javax.servlet.http.HttpSessionEvent;
import javax.servlet.http.HttpSessionListener;

public class WebSessionListener implements HttpSessionListener {
	
	private static Map<String, HttpSession> sessions = new LinkedHashMap<String, HttpSession>();
	@Override
	public void sessionCreated(HttpSessionEvent sessionEvent) {
		System.out.println("创建" + sessionEvent.getSession().getId());
		sessions.put(sessionEvent.getSession().getId(), sessionEvent.getSession());

	} 

	@Override
	public void sessionDestroyed(HttpSessionEvent sessionEvent) {
		System.out.println("销毁" + sessionEvent.getSession().getId());
		sessions.remove(sessionEvent.getSession().getId());
	}

	public static HttpSession getSession(String sessionId) {
		return sessions.get(sessionId);
	}

	public static void remove(String sessionId) {
		if (sessions.containsKey(sessionId)) {
			sessions.remove(sessionId);
		}
	}
}

 

过滤器判断是否登录的代码如下:

public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse,
	FilterChain chain) throws IOException, ServletException {
	HttpServletRequest request = (HttpServletRequest) servletRequest;
	HttpServletResponse response = (HttpServletResponse) servletResponse;
	Employee employee = (Employee) WebUtil.getlogonEmp(request); // 首先从当前session中获取
	if (employee == null) {// 如果仍为空,然后再从cookie中获取
		HttpSession session = WebSessionListener.getSession(WebUtil.getCookieByName(request,"sid"));
		if (session != null) {
			employee = (Employee) session.getAttribute("employee");
		}
		if (employee != null) {
			request.getSession().setAttribute("employee", employee); 
			// 如果employee不为空,则把此对象加进当前session中
		}
		if (employee == null) {
				request.setAttribute("message", "登录后便可进入管理页面");
		request.getRequestDispatcher("logo.jsp").forward(request, response);
		return;// 这里必须return 直接返回到登录页面
		}
	}
	chain.doFilter(request, response);
}

  

 登录时的关键代码:把登录对象加进session中,并把此session加进cookie中

request.getSession().setAttribute("employee", emp对象); 
   // 加进session
WebUtil.addCookie(response, "sid", request.getSession().getId(), request.getSession().getMaxInactiveInterval()); 

   addCookie 方法的代码如下:

 public static void addCookie(HttpServletResponse response, String name, String value, int maxAge) {
  Cookie cookie = new Cookie(name, value);
  cookie.setPath("/");
  if (maxAge > 0)
   cookie.setMaxAge(maxAge);
  response.addCookie(cookie);
 }

 

分享到:
评论
1 楼 cowboy_bebop 2010-11-28  
巴巴运动网,呵呵,楼主和我很类似,也是通过视频来学java的.基础/oracle/jsp,servlet/ssh,jpa/lucene.../项目

之前在onenote上做笔记,所有东西都记在上面.可是不久前把环境搬到linux上时,我的笔记都丢了.想想真纠结.还好在这里找到了你的笔记 :-)

相关推荐

Global site tag (gtag.js) - Google Analytics