叶秋雨 2015-10-14 15:31 采纳率: 33.3%
浏览 2352

关于cookie取值只能取得前一个值。

刚做了一个小作业,用Cookie保存登录时的用户名和密码,在登录成功页面从Cookie中读取用户名和密码,第一次没问题,
然而第二次登录换一个用户名和密码登录,成功页面读取的还是上一次的用户名和密码,这个怎么解决啊。
有经验的大神帮帮忙,谢了。
下面是代码:

登录页面

 import java.io.IOException;
import java.io.PrintWriter;
import java.net.URLDecoder;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 * Servlet implementation class AddUserView
 */
@WebServlet("/Login")
public class Login extends HttpServlet {
    private static final long serialVersionUID = 1L;

    /**
     * @see HttpServlet#HttpServlet()
     */
    public Login() {
        super();
        // TODO Auto-generated constructor stub
    }

    /**
     * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
     */
    protected void doGet(HttpServletRequest request,
            HttpServletResponse response) throws ServletException, IOException {
        response.setContentType("text/html;charset=utf-8");
        //response.setCharacterEncoding("utf-8");
        request.setCharacterEncoding("utf-8");
        PrintWriter out = response.getWriter();
        String username = "";
        String password = "";
        Cookie[] cookies = request.getCookies();
        if(cookies!=null&&cookies.length>0) {
            for(Cookie c:cookies) {
                if(c.getName().equals("username")) {
                     username = URLDecoder.decode(c.getValue(), "utf-8");
                }
                if(c.getName().equals("password")) {
                     password = URLDecoder.decode(c.getValue(), "utf-8");
                }
            }
        }
        out.println("<form action='doLogin' method='post'>");
        out.println("<h2>登录</h2>");
        out.println("<input type='text' name='username' placeholder='账户' value='"+username+"' style='width:200'><br>");
        out.println("<input type='password' name='password' placeholder='密码' value='"+password+"' style='width:200'><br>");
        out.println("记住我<input type='checkbox' name='checkbox' >");
        out.println("<input type='submit' value='登录'>");
        out.println("</form>");

    }

    /**
     * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
     */
    protected void doPost(HttpServletRequest request,
            HttpServletResponse response) throws ServletException, IOException {
        this.doGet(request, response);
    }

}

成功页面

 import java.io.IOException;
import java.io.PrintWriter;
import java.net.URLDecoder;
import java.net.URLEncoder;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 * Servlet implementation class AddUserView
 */
@WebServlet("/doLogin")
public class doLogin extends HttpServlet {
    private static final long serialVersionUID = 1L;

    /**
     * @see HttpServlet#HttpServlet()
     */
    public doLogin() {
        super();
        // TODO Auto-generated constructor stub
    }

    /**
     * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
     */
    protected void doGet(HttpServletRequest request,
            HttpServletResponse response) throws ServletException, IOException {
        response.setContentType("text/html;charset=utf-8");
        //response.setCharacterEncoding("utf-8");
        request.setCharacterEncoding("utf-8");
        PrintWriter out = response.getWriter();
        String[] checkbox = request.getParameterValues("checkbox");
        String username="";
        String password="";
        //
        if(checkbox!=null&&checkbox.length>0) {
            username = URLEncoder.encode(request.getParameter("username"), "utf-8");
            password = URLEncoder.encode(request.getParameter("password"),"utf-8");
            Cookie cusername = new Cookie("username",username);
            Cookie cpassword = new Cookie("password",password);
            cusername.setMaxAge(2000);
            cpassword.setMaxAge(2000);
            response.addCookie(cusername);
            response.addCookie(cpassword);

        }else{
            Cookie[] cookies = request.getCookies();
            if(cookies!=null&&cookies.length>0) {
                for(Cookie c : cookies) {
                    if(c.getName().equals("username")||c.getName().equals("password")) {
                        c.setMaxAge(0);
                        response.addCookie(c);
                    }
                }
            }
        }
        //从cookie中读取数据,然后用URLDecoder函数解码!
        Cookie [] cookies = request.getCookies();
        if(cookies!=null&&cookies.length>0) {
            for(Cookie c1:cookies) {
                if(c1.getName().equals("username")) {
                    username = URLDecoder.decode(c1.getValue(),"utf-8");
                }
                if(c1.getName().equals("password")) {
                    password = URLDecoder.decode(c1.getValue(),"utf-8");
                }
            }
            out.println("恭喜"+username+"登录成功!");
        }
    }

    /**
     * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
     */
    protected void doPost(HttpServletRequest request,
            HttpServletResponse response) throws ServletException, IOException {
        this.doGet(request, response);
    }

}

  • 写回答

3条回答 默认 最新

  • devmiao 2015-10-14 15:32
    关注

    单步调试下呢?看看是不是cookie的存储有问题

    评论

报告相同问题?

悬赏问题

  • ¥20 ML307A在使用AT命令连接EMQX平台的MQTT时被拒绝
  • ¥20 腾讯企业邮箱邮件可以恢复么
  • ¥15 有人知道怎么将自己的迁移策略布到edgecloudsim上使用吗?
  • ¥15 错误 LNK2001 无法解析的外部符号
  • ¥50 安装pyaudiokits失败
  • ¥15 计组这些题应该咋做呀
  • ¥60 更换迈创SOL6M4AE卡的时候,驱动要重新装才能使用,怎么解决?
  • ¥15 让node服务器有自动加载文件的功能
  • ¥15 jmeter脚本回放有的是对的有的是错的
  • ¥15 r语言蛋白组学相关问题