zoukankan      html  css  js  c++  java
  • Cookie,Session学习(java servlet编程)

    Cookie

    问题:HTTP 协议是没有记忆功能的,一次请求结束后,相关数据会被销毁。如果第二次的请求需要使用相同的请求数据怎么办呢?难道是让用户再次请求书写吗?

    为了解决这个问题,引入了Cookie技术;

    Cookie技术其实就是浏览器端实现的数据临时存储技术,保存一些必要的数据,当访问某些网页需要这些数据时,浏览器自动将数据加到HTTP请求中;

    但是具体要保存哪些数据,还有访问哪些网页加上Cookie,还有Cookie信息保存多久都是由服务器决定的。

    浏览器的Cookie数据保存位置:

    下面就介绍在java servlet编程中如何使用Cookie技术

    如果不懂Servlet编程的要先了解servlet,先看另一篇文章:https://www.cnblogs.com/zdl2234/p/11280080.html

      创建Cookie对象
           Cookie c=new Cookie(String name, String value);//Cookie是作为键值对的形式保存的
      设置cookie(可选)
        设置有效期
          c.setMaxAge(int seconds);//如果不设置有效期,那么数据只会保存到浏览器内存中,浏览器关闭就会失效
        设置有效路径
          c.setPath(String uri);  //如果不设置有效路径,则访问任何网页都会附带这个Cookie数据
        响应Cookie信息给客户端
                resp.addCookie(c);

    Cookie的获取

      获取Cookie信息数组
        Cookie[] cks=req.getCookies();
      /遍历数组获取Cookie信息
        使用for循环遍历即可,示例:
          if(cks!=null){
            for(Cookie c:cks){
              String name=c.getName();
              String value=c.getValue();
              System.out.println(name+":"+value);
            }
          }

     

    Session

      学习 Cookie 之后,解决了不用用户编写请求数据的共享问题。但具体的数据还是由客户端发送过来的,其实某个Servlet需要的数据很可能是别的Servlet已经获取过的,我们可以通过别的Servelt获取需要的数据,就不用每次都要客户端发送了,减少了数据的量,可以提高数据的传输效率。

    那么现在要解决的就是Servlet之间的数据共享问题,那么Session就出现了;

      原理:用户使用浏览器第一次向服务器发送请求,服务器在接受到请求后,调用对应的 Servlet 进行处理。在处理过程中会给用户创建 一个 session 对象,用来存储用户请求处理相关的公共数据,并将 此 session 对象的 JSESSIONID 以 Cookie 的形式存储在浏览器中 (临时存储,浏览器关闭即失效)。用户在发起第二次请求及后续请 求时,请求信息中会附带 JSESSIONID,服务器在接收到请求后, 调用对应的 Servlet 进行请求处理,同时根据 JSESSIONID 返回其 对应的 session 对象

      与Cookie不同的是,Session的数据是保存在服务器上的,不同的Servlet通过同一个JSESSIONID就可以获取同一个Session;

    如何使用Session?(一般用户在登陆web项目时会将用户的个人信息存储到Sesion中,供该用户的其他请求使用。)
    //创建session对象/获取session对象
      HttpSession hs=req.getSession();
      //如果请求中拥有session的标识符也就是JSESSIONID,则返回其对应的session队形
      //如果请求中没有session的标识符也就是JSESSIONID,则创建新的session对象,并将其JSESSIONID作为从cookie数据存储到浏览器内存中
       //如果session对象是失效了,也会重新创建一个session对象,并将其JSESSIONID存储在浏览器内存中。
    //
    设置session存储时间   hs.setMaxInactiveInterval(int seconds); //注意:   //在指定的时间内session对象没有被使用则销毁,如果使用了则重新计时。
      //
    设置session强制失效   hs.invalidate(); //存储和获取数据 //存储:
      hs.setAttribute(String name,Object value);
    //获取:
      hs.getAttribute(String name) 返回的数据类型为Object
    //注意: //存储的动作和取出的动作发生在不同的请求中,但是存储要先于取出执行。

    Session失效处理:
      因为Session都有一个存储时间,当访问别的需要用到Session的网页,通过HttpSession hs=req.getSession()获取Session,再通过Session获取之前存的信息;

      这时候有两种情况:

      1,可以获取之前的信息,这表示Session没有失效,则继续处理;

      2,获取信息为null,这表示Session为新创建的,之前的Session失效了,一般这时候就要重定向到可以获取信息的页面了;

  • 相关阅读:
    Linux下的”锁“事儿
    拿得起,放得下,想得开
    关于TCP协议握手的那些事儿

    C++中的RTTI机制解析
    C/C++中产生随机数
    数据库-事务和锁
    JS 数组Array常用方法
    C# 压缩 SharpZipLib
    正则表达式学习3-负向零宽断言
  • 原文地址:https://www.cnblogs.com/zdl2234/p/11282366.html
Copyright © 2011-2022 走看看