JavaWeb-06-cookie和session

目录

1.会话技术

1.1 会话概念

1.2 保存会话的两种技术

1.3 cookie

1.4 session(重点)


1.会话技术

1.1 会话概念

会话

         用户打开一个浏览器,点击了很多超链接,访问了多个web资源,关闭浏览器,整个过程称之为会话。

有状态会话

        一个同学来过教室,下次再来教室,我们就知道这个同学,曾经来过,这个过程就称之为有状态会话。

一个网站怎么证明你来过?

客户端          服务端

1.服务器给客户端一个信件,客户端下次访问服务端带上信件就可以了(cookie);

2.服务器登记你来过了,下次你来的时候我来匹配你,(session);

1.2 保存会话的两种技术

        客户端技术(响应,请求)

session

        服务器技术,利用这个技术可以保存用户的会话信息,我们可以把信息或数据放在seesion中。

        常见场景:网站登录之后,下次登录就不用再次输入登录信息了。

1.3 cookie

        1. 从请求中拿到cookie信息;

        2.服务器响应到客户端

Cookie[] cookies = request.getCookies(); //获取cookie
cookie.getName() // 获取cookie中的key
cookie.getValue() //拿到cookie中的value
new Cookie("lastLoginTime", System.currentTimeMillis() + ""); //新建cookie
ookie.setMaxAge(60*60*24); // 设置cookie的有效期

response.addCookie(cookie); // 响应给客户端

        cookie: 一般会保存在本地的 用户目录下 appdata ;

3.拓展:

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

4.删除cookie

        (1)不设置有效期,关闭浏览器,自动失效;

        (2)设置有效期时间为 0 ;

5.cookie中不能存中文,可以通过转码的方式间接存。

编码解码:

编码:

(1)Cookie cookie = new Cookie("name", URLEncoder.encode("刘先生","utf-8"));

解码:

(2)out.write(URLDecoder.decode(cookie.getValue(),"utf-8"));

1.4 session(重点)

1. 什么是session:

       (1) 服务器会给每一个用户(浏览器)创建一个session对象;

       (2) 一个session独占一个浏览器,只要浏览器没关,这个session就存在;

       (3) 用户登录后,整个网站都可以访问。(保存用户的信息)

2. Session 和cookie的区别:

  •         Cookie是把用户的数据写给用户的浏览器,浏览器保存(可以保存多个);
  •         session把用户的数据写到用户独占session中,服务器保存(保存重要的信息,减少服务器资源的浪费)。
  •         session对象由服务创建。

3. 使用场景:

  •         保存一个登录用户的信息;
  •         购物车信息;
  •         在整个网站中经常会使用数据,我们将它保存在session中。

 SessionServlet01

 protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //解决乱码问题
        request.setCharacterEncoding("utf-8");
        response.setContentType("text/html;charset=utf-8");
        //得到session
        HttpSession session = request.getSession();
        //给session中存数据
        session.setAttribute("person",new Person("刘先生",18));
        //获取Session中的ID
        String sessionId=session.getId();
        //判断session是不是新创建的
        if(session.isNew()){
            response.getWriter().write("session创建成功,ID:"+sessionId);
        }else {
            response.getWriter().write("session已经在服务器中存在了,ID:"+sessionId);
        }

        //Session创建的时候做了什么事情
        Cookie cookie=new Cookie("JSESSIONID",sessionId);
        response.addCookie(cookie);

    }

SessionServlet02

 protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //解决乱码问题
        request.setCharacterEncoding("utf-8");
        response.setContentType("text/html;charset=utf-8");

        //得到session
        HttpSession session = request.getSession();
        Person person = (Person) session.getAttribute("person");
        System.out.println(person);
    }

 SessionServlet03

  protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        HttpSession session = request.getSession();
        //手动注销session
        session.removeAttribute("person");
        session.invalidate();
    }

 自动注销session

        Session默认过期时长为30分钟,可以在web.xml配置中更改过期时长,默认单位(分钟)。

 <!--设置session默认失效的时间-->
    <session-config>
        <!--15分钟后session自动失效-->
        <session-timeout>15</session-timeout>
    </session-config>

原理图解:

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

记录菌

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值