Cookie小概念和小应用---记录用户名

Cookie是个啥

  1. Cookie是保留在客户端浏览器中的信息,用于管理会话,这些信息被包含在HTTP请求头和响应头中在浏览器和服务器之间传递。

    应用的很广泛,比如常见的记住用户名:

    其实就是浏览器告诉服务器:老铁,我又来看你了。
    服务器找到cookie一看,哟,这我哥们啊,昨天还看我来着。
    这一来一去可不就对上号了。

  2. 一般情况下,每个web服务器在浏览器中可以保存20个左右的cookie。不过浏览器一共能存300个左右,谁小饼干吃多了也撑的慌不是。一个小饼干大概4KB。

Cookie到底是个啥

  1. 一个对象,有些属性,哦了
    让我们来看看有哪些重要的:
    1)name 此cookie叫啥名 (不能依据name单独识别一个cookie)

    2)value 就是值呗 (键值对中的值)

    3)path 网址路径 (和name一起确定一个cookie;一般都设置为以 ‘/’ 开头,当前web应用下路径都可以)

    4)maxAge 缓存时间 (单位:秒;默认-1,关闭浏览器就没了;0是直接删除;正数为它的生存时间)


还是老样子,代码加注释,求你看一次

  1. 这是一个强行用来登录的表单

    package com.samblack323.cookie;
    
    import java.io.IOException;
    import java.io.PrintWriter;
    
    import javax.servlet.ServletException;
    import javax.servlet.http.Cookie;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    
    /**
        这是一个强行用来登录的表单
    */
    
    public class LoginServlet extends HttpServlet{
    
        @Override
        protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
            doPost(req,resp);
        }
    
        @Override
        protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
            resp.setContentType("text/html;charset=UTF-8");  //设置浏览器编码
            PrintWriter out = resp.getWriter();  //获得一个字符流输出对象,往响应正文写html代码
    
            String username = "";      
            String checked = "";
            Cookie[] cookies = req.getCookies();   //得到cookie数组的方法
            for (int i = 0; cookies!=null && i < cookies.length; i++) {
                if("username".equals(cookies[i].getName())) {   // 如果该是存用户名的那个
                    username = cookies[i].getValue();          //搞到这个用户名呗
                    checked = "checked='checked'";            //顺便把记住用户名给勾选上
                }
            }
    
            //这里用out对象写了简单的一个表单
            //注意username 和 checked 两个是变量,如果没有值,就给"",反正没影响的啦
            out.write("<form action='"+req.getContextPath()+"/cookie/dologin"+"' method='post'>");
            out.write("用户名: <input type='text' name='username' value="+username+"><br/>");
            out.write("密码: <input type='password' name='password'><br/>");
            out.write("记住用户名: <input type='checkbox' name='remember' "+checked+"><br/>");
            out.write("<input type='submit' value='登录'><br/>");
            out.write("</form>");
        }
    
    }
    
  2. 这是一个强行登录的servlet

    package com.samblack323.cookie;
    
    import java.io.IOException;
    import java.io.PrintWriter;
    
    import javax.servlet.ServletException;
    import javax.servlet.http.Cookie;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    
    /**
    这是一个强行登录的servlet
    */
    public class DoLoginServlet extends HttpServlet {
    
      @Override
      protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        doPost(req, resp);
      }
    
      @Override
      protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        req.setCharacterEncoding("UTF-8");   //设置服务端编码
        resp.setContentType("text/html;charset=UTF-8");  //设置浏览器编码
        PrintWriter out = resp.getWriter();   //搞个流对象
    
        // 获取表单数据
        String username = req.getParameter("username");  //搞到用户名
        String password = req.getParameter("password");  //搞到密码
        String remember = req.getParameter("remember");  //搞到是否记住用户名
    
        Cookie ck = new Cookie("username", username);   //搞个Cookie:键值对,so easy
        ck.setPath("/");   //搞个path,就是根目录多省心
    
        // 处理业务逻辑
        if ("tom".equals(username) && "123".equals(password)) {   //强行登录
            if (remember != null) {        //如果选择了记住用户名
                ck.setMaxAge(60*60);      //此cookie存一个小时吧
            } else {
                ck.setMaxAge(0);          //不然滚蛋,立马消失
            }
            resp.addCookie(ck);           //在响应中加上它,带它回老家
            out.write("登录成功!");
        } else {
            out.write("登录失败!");
                //2秒后刷新到登录页面去呗
            resp.setHeader("refresh", "2;url=" + req.getContextPath() + "/cookie/login");
        }
    
       }
    
    }
    

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值