原理说明:
在application保存所有用户名,和其登陆所产生的SESSIONID,同时把用户的信息存于当前session里面。
当又有用户登陆的时候,更新session信息,同时检测application里面,用户名和sessionid是否一致,
如果不一致,则注销前面的session.
代码实现:
JSP检测:
<%
//session检测
eshop.member_sys.memberBean mb = (eshop.member_sys.memberBean)session.getAttribute("LoginMember");
//out.println(mb);
//out.println(mb.getId());
//out.println();
if(null!=mb)
{
java.util.Hashtable htb = (java.util.Hashtable)application.getAttribute("MemberList");
String memberSid = (String)htb.get(mb.getAccount());
if (session.getId().equals(memberSid)) {
out.print( "hi,欢迎"+mb.getAccount()+"的到来! | <a href=admin/member_sys/DealWithCenter.jsp?action=loginOut>注销</a>");
} else {
session.removeAttribute("LoginMember");
session.invalidate();
}
} else {
%>
<a href='reg.jsp'>注册</a> | <a href='login.jsp'>登录</a>
<%
}
%>
登陆处理:Java
package eshop;
import java.util.Enumeration;
import java.util.Hashtable;
import javax.servlet.ServletContext;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpSession;
import eshop.member_sys.memberBean;
/**
* 记录在线客服个数 和 进行克服唯一登陆判断
*
* @author wei
*
*/
public class Servicer {
private static Servicer servicer;
private static String sessionName = "LoginMember";
//private static Hashtable ht = new Hashtable();
private static String sessionList = "MemberList";
private ServletContext sc;
public Servicer(ServletContext sc) {
this.sc = sc;
}
public static Servicer getInstance(ServletContext sc) {
if (servicer == null)
servicer = new Servicer(sc);
return servicer;
}
/**
* 用户唯一登陆
* @param mb
* @param session
* @param account
*/
public void setService(memberBean mb, HttpSession session, String account) {
//StringBuffer Str = new StringBuffer(4096);
//Str.append(gsid);
//Str.append(kfid);
session.setAttribute(sessionName, mb);
//System.out.println(">>>sessionid<<<<" + session.getId());
if (sc.getAttribute(sessionList) == null) {// 第一次登陆
Hashtable htb = new Hashtable();
htb.put(account, session.getId());
sc.setAttribute(sessionList, htb);
} else {// 第二次登陆后第一次无效
Hashtable htb = (Hashtable) sc.getAttribute(sessionList);
String key = null;
if (htb.containsKey(account)) {
//更新session
htb.remove(account);
}
htb.put(account, session.getId());
sc.setAttribute(sessionList, htb);
}
}
}