JSP 通过cookie实现表单记住账户密码自动填充功能

第一次写博客如果表述不清的地方敬请见谅= =不过讲道理的话应该也不会有人看到哈哈,开始写博客也是希望给自己养成一个写博客的好习惯,记录下学习过程中的心得体会。虽然现在很菜!但是说不定以后。。。。还是很菜呢。。好了不瞎逼逼了开始进入正题。

主要内容是通过jsp内置对象 response以及 request来获取或写入cookie从而实现表单自动填充的功能也就是我们平时遇见的“记住密码”。
主要分为两个页面:
登录页面
登录页面
登录成功页面
这里写图片描述

部分代码如下:

<body>
    <%
      String username = "";
      String password = "";
      String s;
      Cookie [] cookies =request.getCookies();
      for (Cookie cookie:cookies) {
        s=cookie.getName(); //通过getName方法获得cookie的名称
        if (s.equals("username")) {
          if (cookie.getValue()!=null) {
            username=username+cookie.getValue(); //通过getValue方法获得cookie的值
          }
        } else 
        if (s.equals("password")) {
          if (cookie.getValue()!=null) {
            password=password+cookie.getValue();
          }
        }
      }
    %>
    <form action="login.jsp" method="post">
           用户登录 <br />
     <!-- 使用通过cookie获取的字符串自动填写表单内容 -->
           用户名:<input type="text" name="username" value="<%=username %>" /> <br />
           密码 : <input type="password" name="password" value="<%=password %>" /> <br />
      <input type="checkbox" name="checkbox" value="selected" />记住密码 <br />
      <input type="submit" value="登录" />
    </form>
  </body>
<body>
    <h1>登录成功!</h1>
    <%
      //if语句用户是否勾选了记住密码选项
      if (request.getParameter("checkbox")!=null) {
        //记住密码:生成新的cookie用来保存账号密码
        Cookie username = new Cookie("username",request.getParameter("username"));
        username.setMaxAge(1296000);//设置cookie最长保存时间15天
        Cookie password = new Cookie("password",request.getParameter("password"));
        password.setMaxAge(1296000);
        //覆盖旧的cookie
        response.addCookie(username);
        response.addCookie(password);
      } else 
      {
        Cookie [] cookies = request.getCookies();
        Cookie username=null;
        Cookie password=null;
        //寻找是否已经存在cookie
        for (Cookie cookie:cookies) {
          if (cookie.getName().equals("username")) {
            username=cookie;
          } else 
          if (cookie.getName().equals("password")) {
            password=cookie;
          }
        }
        //若cookie存在则通过设置cookie保存时间为0的方法来删除cookie
        if (username!=null) {
          username.setMaxAge(0);
          response.addCookie(username);
        }
        if (password!=null) {
          password.setMaxAge(0);
          response.addCookie(password);
        }
      }
    %>
  </body>

期间有几个问题总结一下:
1.对于checkbox判断已勾选有三种写法分别如下:

if (request.getParameter("checkbox")=="selected") {
if (request.getParameter("checkbox").equals("selected")) {
if (request.getParameter("checkbox")!=null) {

其中第一种写法是不行的,原因是虽然getParameter方法返回了String对象且字符串为 “selected”但是所处的内存地址不同所以 “==”返回的结果为false,呃为什么我会纠结于这么无聊的问题呢因为我专门回java se试了一下发现在java se的环境下直接使用”==”是没问题的就是单纯比较字符串是否相同的orz,所以我个人认为”==”返回的结果跟环境有关系所以遇到字符串比较还是使用equals比较稳定。

2.一开始没有勾选记住密码仍会记住密码,找了半天原因最后发现是最后将cookie的生存期限设为0之后还得重洗addcookie才可以。由于java对象是址传递所以我原来以为不需要重新addcookie就可以= =,根据这个现象我猜可能是只有在addcookie之前设置的maxage才有效吧。。纯属个人猜测如果不对请大神指正。

实现记住密码或者自动登录功能,可以使用cookie或session来存储用户信息。具体实现步骤如下: 1. 在登录页面添一个复选框,让用户选择是否记住密码自动登录。 2. 在后台处理登录验证时,如果用户选择了记住密码自动登录,就在cookie或session中保存用户信息,例如用户名和密码或者用户ID等。 3. 在用户下次访问该网站时,先检查cookie或session中是否存在用户信息,如果存在,则直接跳转到用户主页,实现自动登录;如果不存在,则跳转到登录页面,让用户重新登录。 以下是一个使用cookie实现记住密码自动登录的示例: ```jsp <% // 处理登录请求 String username = request.getParameter("username"); String password = request.getParameter("password"); String remember = request.getParameter("remember"); // 验证用户名和密码是否正确 boolean isValidUser = validateUser(username, password); if (isValidUser) { // 如果用户选择了记住密码自动登录,就创建一个cookie保存用户信息 if ("on".equals(remember)) { Cookie cookie = new Cookie("userInfo", username + ":" + password); cookie.setMaxAge(7 * 24 * 60 * 60); // 设置cookie有效期为7天 response.addCookie(cookie); } // 将用户信息保存到session中 HttpSession session = request.getSession(); session.setAttribute("userInfo", username); // 跳转到用户主页 response.sendRedirect("main.jsp"); } else { // 登录失败,返回登录页面 response.sendRedirect("login.jsp?error=1"); } %> ``` 在用户下次访问网站时,可以在页面载时检查cookie中是否存在用户信息,如果存在,则直接跳转到用户主页: ```jsp <% // 检查cookie中是否存在用户信息 String userInfo = null; Cookie[] cookies = request.getCookies(); if (cookies != null) { for (Cookie cookie : cookies) { if ("userInfo".equals(cookie.getName())) { userInfo = cookie.getValue(); break; } } } // 如果存在用户信息,则直接跳转到用户主页 if (userInfo != null) { String[] parts = userInfo.split(":"); String username = parts[0]; String password = parts[1]; boolean isValidUser = validateUser(username, password); if (isValidUser) { HttpSession session = request.getSession(); session.setAttribute("userInfo", username); response.sendRedirect("main.jsp"); } } %> ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值