(javaweb-08)cookie、session

一、会话

会话:用户打开一个浏览器,点击了很多超链接,访问多个web资源,关闭浏览器

二、两种保存会话技术(cookie、session )

2.1 cookie
在这里插入图片描述
1、从请求中拿到cookie信息
2、服务器响应给客户端cookie

@Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //服务器,告诉你,你来的时候,

        //处理中文问题
        req.setCharacterEncoding("utf-8");
        resp.setCharacterEncoding("utf-8");

        PrintWriter out = resp.getWriter();

        //Cookie,服务器从客户端获取
        Cookie[] cookies = req.getCookies();   //返回为数组,cookies可以是多个

        //判断cookie是否存在
        if (cookies!=null){
            out.write("你上一次访问的时间是:");
            for (int i = 0; i < cookies.length; i++) {
                Cookie cookie = cookies[i];
                if (cookie.getName().equals("lastlogin")){
                    String time = cookie.getValue();
                    //转换为long型
                    long l = Long.parseLong(time);
                    Date date = new Date(l);  //再转换为日期
                    out.write(date.toLocaleString());

                }
            }


        }else{  //浏览器默认有cookie
            out.write("第一次访问页面");
        }

        //服务器给客户端相应一个cookie
        Cookie lastlogin = new Cookie("lastlogin", System.currentTimeMillis() + "");
        //设置cookie有效期有1天
        lastlogin.setMaxAge(24*60*60);
        resp.addCookie(lastlogin);

    }

Cookie[] cookies = req.getCookies(); //获取cookie
cookie.getName() //获取cookie的键名
cookie.getValue(); //cookie值
new Cookie(“lastlogin”, System.currentTimeMillis() + “”); //新建一个cookie
resp.addCookie(lastlogin); //响应给客户端一个cookie
lastlogin.setMaxAge(246060); //设置cookie有效期

在这里插入图片描述在这里插入图片描述
在这里插入图片描述
cookie:一般会保存在本地的用户目录中的appdata

一个cookie只能保存一个信息
一个web站点可以给浏览器发送多个cookie,最多存放20个cookie
Cookie大小限制4kb
浏览器上限为300个cookie

删除cookie:

  • 不设置有效期,关闭浏览器,cookie自动失效
  • 设置有效期时间为0
 //创建一个cookie,名字必须与要删除的一致 (即与demo01的cookie中的一致) 这样才可以实现替换
Cookie cookie = new Cookie("lastlogin",System.currentTimeMillis()+"");
//有效期为0,即删除
 cookie.setMaxAge(0);

2.2 session

一个用户对应一个session、存放的数据不一致
在这里插入图片描述
session方法:
在这里插入图片描述

SessionDemo01 存储session

@Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //解决乱码问题
        req.setCharacterEncoding("utf-8");
        resp.setCharacterEncoding("utf-8");
        resp.setContentType("text/html;charset=utf-8");
        
        //得到session
        HttpSession session = req.getSession();
        
        //给session中存东西
        session.setAttribute("name","伊利");
        //获取session的ID
        String id = session.getId();
        //判断是否是新的session
        boolean aNew = session.isNew();
        if (aNew){
            resp.getWriter().write("这是新的session,ID为"+id);
        }else {
            resp.getWriter().write("session已经存在");
        }

    }

在这里插入图片描述

SessionDemo02 获取session存储的数据

 @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //解决乱码问题
        req.setCharacterEncoding("utf-8");
        resp.setCharacterEncoding("utf-8");
        resp.setContentType("text/html;charset=utf-8");
        //得到session
        HttpSession session = req.getSession();

        //得到session值
        String name = (String) session.getAttribute("name");
        System.out.println(name);   //伊利

    }

删除session

  • 方法一
	//得到session
	HttpSession session = req.getSession();
	//注销"name"session
	session.removeAttribute("name");
	//方法一、手动注销
	session.invalidate();
  • 方法二
 <!--方法二、session的注销
      设置session默认的失效时间-->
  <session-config>
    <!--10分钟后  session自动注销-->
    <session-timeout>10</session-timeout>
  </session-config>

2.3 cookie和session的区别
cookie:把用户的数据写给用户的浏览器,用浏览器保存(可以保存对个)

session:把用户的数据写到用户独自的session中(用户的session ID),服务器保存(保存重要的消息,减少服务器资源的浪费)
- 可以保存一个登陆用户的消息
- 购物车信息

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值