想实现如果存在第二个登录则第一个登录失效,我登录时设置的是将用户的信息存放在session中。先在这里谢谢各位的关注了

解决方案 »

  1.   

    不仔细去研究过这东西,。。我公司是用spring acegi做的,不过也没考虑第二个登录问题
      

  2.   

    你在第二个用户登录时,密码等验证完了后把第二个用户放到session中把第一个用户给覆盖了。你试下吧
      

  3.   

    上个月也有讨论这个问题的,有好多人都发表了意见,但也没有标准的答案
    我看到一个,:将SEssionID存入DB中,当你登录时,判断当前的SEssionID和DB
    里是不是同一个,如果不是,说明是第二人登录了,那就将DB里的SESSIONID注销
    然后再处理第二个登录.
      

  4.   

    具体的怎么放?
    把第二个用户放到session中把第一个用户给覆盖,要的就是这样的效果!
      

  5.   

    把登陆人的sessionID和登陆的时间用户名都放入一个静态的数据结构中,如果该用户在同一个会话中又重新登陆的话,直接修改数据结构中的时间,如果用户是从另外的sessionID即重新打开一个IE登陆的话,或者从另外的机器登陆的话,这个要看你的应用允不允许这样.如果不允许,提示该帐号已经使用,如果允许,那就当做另外一个用户好了,反正他们的sessionID不同.
      

  6.   

    可以再数据库中设置登陆状态,,放session中的话只对当前机器有效吧
      

  7.   

    不是啊,我不能修改数据库字段,数据库中没有对在线这个设计。我在网上查到了这样一段代码
    后登陆的用户会把先登陆的用户踢下线具体实现:sessionCheck:Java code    package test; import javax.servlet.ServletContext; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpSession; import org.apache.struts.action.ActionMapping; public class sessionCheck { private static sessionCheck sessioncheck; public sessionCheck(HttpServlet servlet) { } public static sessionCheck getInstance(HttpServlet servlet) { if (sessioncheck==null) { sessioncheck=new sessionCheck(servlet); } return sessioncheck; } public void setSession(String userName,HttpServlet servlet,HttpSession session,ActionMapping mapping) { final ServletContext sc = servlet.getServletContext();//取得容器,容器中根据用户唯一标识userID存放session System.out.println(sc); System.out.println(session); if (sc.getAttribute(userName) != null) { // 第二次登陆后第一次无效 ((HttpSession) sc.getAttribute(userName)).invalidate();// 清除第一次登陆的session System.out.println(session); } sc.setAttribute(userName, session);//放入当前最新session mapping.findForward("sessionDestroy") ; } }
    UserLoginForm:Java code    sessionCheck.getInstance(this.getServlet()).setSession(userName, servlet, session, mapping);
    jsp:HTML code    <body ="sessionDestroy()"> < language="java" type="text/java"> sessionDestroy() { alert("连接超时,或帐号已在别处登陆,请查证后重新登陆"); location.href = "UserLogin.jsp" ; } </>这样在两台电脑上后登陆的人用户就会把先登陆的给踢掉,但是暂时还没实现在同一台电脑上后登陆的用户把先登陆的踢掉的功能上面是在后台实现的,如果要在JSP中做,直接appliction.getAttribute(userId),appliction.setAttribute(userId,  session)就行
      

  8.   

    但是不好用,尤其是formbean中调用都有错。好多人都转摘了这段,谁了解这段代码,或者用过好用的给我讲解一下
      

  9.   

    在tomcat管理session的基础上,自己再管理一套session,也就是在声明个静态的list放在内存中,登录的时候去检查list中的item,如果改用户已经登录,这覆盖item,或是标识这个item。
      

  10.   

    用SESSION监听器,获取SESSION列表,登录第二个用户时把第一个USERID用户清掉
      

  11.   

    我的做法是在Context中放入一个Map,只要用户登录成功就像里面存入一个用户的session,Key的值是用户名。当用户登录时先判断context中Map里有没有该用户(使用用户名),有则取出使session失效,然后存入第二个登录的用户的session。
    另外再做一个session监听器,当session失效时从context中的Map里面销毁那个用户的Key。
      

  12.   

    登录Servletpackage cn.sist.login;import java.io.IOException;
    import java.io.PrintWriter;
    import java.util.HashMap;
    import java.util.Map;import javax.servlet.ServletConfig;
    import javax.servlet.ServletContext;
    import javax.servlet.ServletException;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    import javax.servlet.http.HttpSession;
    import javax.servlet.jsp.JspFactory;
    import javax.servlet.jsp.PageContext;import cn.sist.tool.StrTool;/**
     * Servlet implementation class LoginServlet
     */
    public class LoginServlet extends HttpServlet {
    private static final long serialVersionUID = 1L;
        private static String loginPage = "login.html";   
        private static String loginErrorPage = "errorLog.jsp";
        private static String loginedPage = "success.jsp";
        public LoginServlet() {
            super();
            // TODO Auto-generated constructor stub
        } /**
     * @see Servlet#init(ServletConfig)
     */
    public void init(ServletConfig config) throws ServletException {
    super.init(config);
    ServletContext sc = super.getServletContext();
    //在线用户列表.
    sc.setAttribute("logUsers", new HashMap<String,HttpSession>());
    String logPage = config.getInitParameter("LoginPage");
    if(!StrTool.isEmpty(logPage)){
    LoginServlet.loginPage = logPage;
    }
    if(!StrTool.isEmpty(config.getInitParameter("LoginErrorPage"))){
    LoginServlet.loginErrorPage = config.getInitParameter("LoginErrorPage");
    }
    if(!StrTool.isEmpty(config.getInitParameter("LoginedPage"))){
    LoginServlet.loginErrorPage = config.getInitParameter("LoginedPage");
    }
    } /**
     * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
     */
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    PageContext pageContext = JspFactory.getDefaultFactory().getPageContext(this, request, response, null, true, 8192, true);
    response.setCharacterEncoding("UTF-8");
    response.setContentType("text/html;charset=UTF-8");
    PrintWriter out = response.getWriter();
    request.setAttribute("loginPage", loginPage);
    pageContext.forward(loginErrorPage);
    } /**
     * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
     */
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { HttpSession session = request.getSession();
    if(session.getAttribute("user")!= null){
    response.sendRedirect(loginedPage);
    return;
    }
    response.setContentType("text/html;charset=UTF-8");
    PageContext pageContext = JspFactory.getDefaultFactory().getPageContext(this, request, response, null, true, 8192, true);
    request.setCharacterEncoding("UTF-8");
    response.setCharacterEncoding("UTF-8");
    PrintWriter out = response.getWriter();
    User user = new User();
    user.setUserName(request.getParameter("username"));
    user.setPassWord(request.getParameter("password"));
    Map<String,HttpSession> logUsers = (Map<String,HttpSession>)super.getServletContext().getAttribute("logUsers"); user = LoginBean.doLogin(user);
    if(null != user){
    request.setAttribute("user", user);
    pageContext.forward("repeatLogin");//页面转发到ExistsLoginUserServlet处理.
    }else{
    pageContext.forward(loginErrorPage);
    }

    }

    }判断用户是否已经登录过的Servlet.package cn.sist.login;import java.io.IOException;
    import java.io.PrintWriter;
    import java.util.Map;import javax.servlet.ServletConfig;
    import javax.servlet.ServletException;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    import javax.servlet.http.HttpSession;
    import javax.servlet.jsp.JspFactory;
    import javax.servlet.jsp.PageContext;import cn.sist.tool.StrTool;/**
     * Servlet implementation class ExistsLoginUser
     */
    public class ExistsLoginUserServlet extends HttpServlet {
    private static final long serialVersionUID = 1L;
        private static String successPage = "success.jsp";   
        private static String errorPage = "kick.jsp";
        
        public ExistsLoginUserServlet() {
            super();
        }
    public void init(ServletConfig config) throws ServletException {
    super.init(config);
    if(StrTool.isEmpty(config.getInitParameter("SuccessPage"))){
    successPage = config.getInitParameter("SuccessPage");
    }
    if(StrTool.isEmpty("ErrorPage")){
    errorPage = config.getInitParameter("ErrorPage");
    }
    }
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    doPost(request,response);
    }
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    Map<String,HttpSession> logUsers = (Map<String,HttpSession>)super.getServletContext().getAttribute("logUsers");
    response.setContentType("text/html;charset=UTF-8");
    PageContext pageContext = JspFactory.getDefaultFactory().getPageContext(this, request, response, null, true, 8192, true);
    User user = (User)request.getAttribute("user");
    PrintWriter out = response.getWriter();
    if(user == null){
    out.println(super.getServletInfo());
    out.println("<h1>Server has stoped!</h1>");
    return;
    }
    HttpSession session = request.getSession();
    if(logUsers.get(user.getUserName()) != null){
    pageContext.forward(errorPage);//转发到用户密保页面(用户可输入密保踢掉已登录用户).
    return;
    }else{
    pageContext.forward(successPage);//由此处将已登录的用户添加到上下文中.
    }
    }
    }踢出用户的界面-用户输入正确的答案则提出之前登录的用户(这里使用邮箱做判断.)package cn.sist.login;import java.io.IOException;
    import java.io.PrintWriter;
    import java.util.Map;import javax.servlet.ServletConfig;
    import javax.servlet.ServletContext;
    import javax.servlet.ServletException;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    import javax.servlet.http.HttpSession;
    import javax.servlet.jsp.JspFactory;
    import javax.servlet.jsp.PageContext;import cn.sist.tool.StrTool;/**
     * Servlet implementation class KickUserServlet
     */
    public class KickUserServlet extends HttpServlet {
    private static final long serialVersionUID = 1L;
        private static String successPage = "success.jsp";   
        private static String errorPage = "kick.jsp";
        
        /**
         * @see HttpServlet#HttpServlet()
         */
        public KickUserServlet() {
            super();
            // TODO Auto-generated constructor stub
        } public void init(ServletConfig config) throws ServletException {
    super.init(config);
    if(StrTool.isEmpty(config.getInitParameter("SuccessPage"))){
    successPage = config.getInitParameter("SuccessPage");
    }
    if(StrTool.isEmpty("ErrorPage")){
    errorPage = config.getInitParameter("ErrorPage");
    }
    }

    /**
     * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
     */
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    response.setContentType("text/html;charst=UTF-8");
    response.setCharacterEncoding("UTF-8");
    PageContext pageContext = JspFactory.getDefaultFactory().getPageContext(this, request, response, null, true, 8192, true);
    PrintWriter out = response.getWriter();
    HttpSession session = request.getSession();
    User user = null;
    if((user=(User)session.getAttribute("NewUser"))!= null){
    ServletContext sc = getServletContext();
    Map<String,HttpSession> logUsers = (Map<String,HttpSession>)sc.getAttribute("logUsers");
    logUsers.get(user.getUserName()).invalidate();
    session.removeAttribute("NewUser");
    if(user.getEmail().equals(request.getParameter("email"))){
    request.setAttribute("user", user);
    pageContext.forward(successPage);
    }else{
    out.println("<script>");
    out.println("alert('Email unEqual!');");
    out.println("history.back(-1);");
    out.println("</script>");
    }
    }else{
    out.println("连接已经失效.");
    }
    } /**
     * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
     */
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    doGet(request,response);
    }}呵呵,我也才刚刚毕业,还没有工作,正在培训呢,无聊做的,不好别批评我了.
      

  13.   

    还有个session监听器package cn.sist.login;
    import java.util.Map;import javax.servlet.ServletContext;
    import javax.servlet.http.HttpSession;
    import javax.servlet.http.HttpSessionEvent;
    import javax.servlet.http.HttpSessionListener;
    /**
     * Application Lifecycle Listener implementation class UserLogoutListener
     *
     */
    public class UserLogoutListener implements HttpSessionListener {    /**
         * Default constructor. 
         */
        public UserLogoutListener() {
            // TODO Auto-generated constructor stub
        } /**
         * @see HttpSessionListener#sessionCreated(HttpSessionEvent)
         */
        public void sessionCreated(HttpSessionEvent e) {
            // TODO Auto-generated method stub
        } /**
         * @see HttpSessionListener#sessionDestroyed(HttpSessionEvent)
         */
        public void sessionDestroyed(HttpSessionEvent e) {
         HttpSession session = e.getSession();
         if(null != session.getAttribute("user")){
         User user = (User)session.getAttribute("user");
         ServletContext sc = session.getServletContext();
         Map<String,HttpSession> map = (Map)sc.getAttribute("logUsers");
         map.remove(user.getUserName());
         }
        
        
        }

    }
      

  14.   

    一个字符串工具,之使用验证字串是否是null或者""得
      

  15.   

       String logPage = config.getInitParameter("LoginPage");
            if(!StrTool.isEmpty(logPage)){
                LoginServlet.loginPage = logPage;
            }
            if(!StrTool.isEmpty(config.getInitParameter("LoginErrorPage"))){
                LoginServlet.loginErrorPage = config.getInitParameter("LoginErrorPage");
            }
            if(!StrTool.isEmpty(config.getInitParameter("LoginedPage"))){
                LoginServlet.loginErrorPage = config.getInitParameter("LoginedPage");
            }这段什么意思啊?
      

  16.   

    哦,是一些转发路径的页面,如果Servlet传入的参数为空则使用默认页面跳转,否则则使用Servlet配置的路径跳转啊。我这里有eclipse的工程文件,把邮箱给我,发给你吧。自己建下数据库,改下数据库连接文件运行下看看。