自动登录功能:我的想法是在登录的时候加入cookies,之后返回主页,然后在主页添加一个Fliter,如果截取到cookies就拿户名密码提交到登录的Action,可才发现,这样会死循环,当有cookies时跳Action,Action跳主页,主页进入filter继续Action。。

解决方案 »

  1.   

    什么乱七八糟的, (打开页面 - 查找cookie是否有用户,有就直接登陆,没有就到登陆页面) 登陆 - 记住用户 - 保存cookie.
      

  2.   

    肯定用cookie的,session浏览器关掉就over了。。
      

  3.   

    完全可以不用filter啊
    主页获取cookie的jsp应该是这样
    <%
    此处通过cookie获取用户名和密码
    String username=...
    String userpassword=...
    %>
    <%
    if(有用户名和密码){
    %>
    <form action="***" name="form1" method="post">
    <input type="hidden" name="username" value="<%=username%>" />
    <input type="hidden" name="userpassword" value="<%=userpassword%>" />
    </form>
    <srcipt type="text/javascript">
    document.form1.submit();
    </script><%
    }else{
    %>
    此处是正常登录页面的代码
    <%}%>
      

  4.   

    那个问题解决了。不过现在出现新的问题,我贴代码吧
    filter
    public class LoginFilter implements Filter { public void destroy() {
    // TODO Auto-generated method stub } public void doFilter(ServletRequest request, ServletResponse response,
    FilterChain chain) throws IOException, ServletException {
    HttpServletRequest hrequest = (HttpServletRequest) request;  
            HttpServletResponse hresponse = (HttpServletResponse) response;  
            Cookie[] cookies = hrequest.getCookies();  
            System.out.println("cook");
            String[] cooks = null;  
            String username = null;  
            String password = null;  
            if (cookies != null) {  
                for (Cookie coo : cookies) {  
                
                    String aa = coo.getValue();  
                    cooks = aa.split("==");  
                    if (cooks.length == 2) {  
                        username = cooks[0];  
                        password = cooks[1];
                        System.out.print("o"+username+"oo"+password);
                 Select s=new Select();
                 Users newUser=null;
                 Users user=new Users();
                 user.setName(username);
                 user.setPassword(password);
                 newUser=s.user_Login(user);
                 if(newUser!=null){
                 HttpSession session=hrequest.getSession();
                 System.out.println("有cook1");
                 session.setAttribute("user", newUser);
                  chain.doFilter(hrequest, response); 
                 }
                 else{
                 System.out.println("nocook1");
                 chain.doFilter(hrequest, response); 
                 }
                       
                    }
                    else{  
                     System.out.println("nocook2");
                     chain.doFilter(hrequest, response); 
                     }  
                   
                }  
            }
            else{  
             System.out.println("nocook");
             RequestDispatcher re = null;
      re = hrequest.getRequestDispatcher("/");
      re.forward(request, response);
             }  
         } public void init(FilterConfig arg0) throws ServletException {
    // TODO Auto-generated method stub }}
      

  5.   

    cook
    o1oo1有cook1
    nocook2
    2011-10-9 11:27:16 org.apache.catalina.core.StandardWrapperValve invoke
    严重: Servlet.service() for servlet default threw exception
    java.lang.IllegalStateException
    at org.apache.catalina.connector.ResponseFacade.sendError(ResponseFacade.java:407)
    at org.apache.catalina.servlets.DefaultServlet.serveResource(DefaultServlet.java:713)
    at org.apache.catalina.servlets.DefaultServlet.doGet(DefaultServlet.java:325)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:617)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
    at com.zhku.filter.LoginFilter.doFilter(LoginFilter.java:65)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:286)
    at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:845)
    at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:583)
    at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447)
    at java.lang.Thread.run(Thread.java:662)
      

  6.   

    新问题:你看看我代码的错误信息下
    为什么输出了“有cook1”还会去执行“nocook2”
      

  7.   

    自动登录看session有值不就可以了,干嘛要过滤器~
      

  8.   

    大哥session是会话级的,你把浏览器关了session还在么?
      

  9.   

    如果你是正常关闭的web   server!
    比如tomcat
    它会把session写到磁盘上!
    而且session有作用域,还有超时的时间,都可以设置的~
    怎么能说浏览器关闭就没有了呢?
      

  10.   

    服务器关了session都有保留,何况你关闭浏览器。
      

  11.   

    都啥啊 cookie是存你电脑上的 session是存服务器上的 什么跟什么啊 看的我都晕了
      

  12.   


    这位哥们说的的确没错 session的底层实现就是cookie
    所以session的时间是可以设置的
    但是服务器最长支持的session是30分钟  所以LZ所用到的自动登录与session真的没有关系只能用cookie  那些说session的是没有明白lz的真正意义把~~
      

  13.   

    cookie中不要存密码,不然可能被其它人盗用
      

  14.   

    你可以看一下这篇文章,希望对你有帮助:http://blog.csdn.net/afgasdg/article/details/6642628
      

  15.   

    session写在服务器上,那么用户下次打开网页的时候,服务器怎么知道哪个session是当前用户的?