您好,欢迎来到化拓教育网。
搜索
您的当前位置:首页【web】Cookie/Session

【web】Cookie/Session

来源:化拓教育网

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

有状态会话:记录曾经来过

一个网站怎么证明你来过

客户端    服务器

1,服务端给客户端一个信件,客户端下次访问服务端得时候带上信件即可;cookie

2,服务器登记你来过了,下次来得时候我来匹配你;

保存会话得两种技术如下:

Cookie

服务器给客户端cookie-->客户端请求的时候携带cookei(资源)

  • 客户端技术(响应,请求)
  • 一个cookie只能保存一个信息
  • 一个web站点可以给浏览器发送多个cookie,最多存放20个cookie
  • cookie大小有4kb
  • 300个cookie浏览器上限
  • 删除cookie
    • 不设置有效期,关闭浏览器,自动失效
    • 设置有效期时间为0
      • cookie.setMaxAge(0);

Session(重点)

服务器给客户端sessionId(每个用户唯一)-->客户端拿到的是sessionId(钥匙),资源在session里面

  • 服务器技术,利用这个技术可以保存用户得会话信息,可以把信息数据放到session
  • 什么是session?

    • 服务器会给每一个用户(浏览器)创建一个seesion
    • 一个session独占一个浏览器,只要浏览器没有关闭,这个session就存在
    • 场景:用户登录之后,整个网站就都可以访问了   --保存用户的信息,保存购物车信息
  • 使用场景session:
    • 保存用户登录信息,下 次不用再登录,可以直接进入
    • 购物车信息
    • 在整个网站中经常会使用得数据,保存到
  • 删除session
    • 手动删除
      • session.removeAttribute("name");//删掉其中一个元素
        session.invalidate();//注销   之前的session会被删掉,但会立马生成一个新得

    • web.xml里面设置自动失效时间
      • <!--  设置sessionm默认得失效时间-->
          <session-config>
        <!--    15分钟后session自动失效,以分钟为单位-->
            <session-timeout>15</session-timeout>
          </session-config>

session和cookie区别

  • cookie:
    • 是把用户得数据,写给用户的浏览器,浏览器保存
    • 不是很安全
    • 单个保存得数据不能超过4k,大多浏览器一个站点最多只能由20个cookie
  • session
    • 把用户得数据些写到用户独占得session中,服务器端保存(保存重要信息,减少服务器资源浪费)
    • 相对安全一点
    • 储存于服务器,浏览器对其无影响
  • session对象由服务创建

Cookie应用

1,从请求中拿到cookie信息

2,服务器相应给客户端cookie

Cookie[] cookies = req.getCookies();//获得cookie
cookie.getName()//拿到cookie的key
cookie.getValue()//拿到cookie的value
Cookie cookie = new Cookie("name",System.currentTimeMillis()+"");//新建一个cookie
cookie.setMaxAge(24*60*60);//设置保存最大时间,有效期关闭会话依然存在  24h 60min  60sec
resp.addCookie(cookie);//响应给客户端一个cookie

测试设置cookie案例

public class CookieDemo01 extends HttpServlet {

    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
       //1,解决中文乱码问题
       req.setCharacterEncoding("gbk");
       resp.setCharacterEncoding("gbk");
       //2,服务器端从客户端获取cooKie
        Cookie[] cookies = req.getCookies();
        PrintWriter out = resp.getWriter();
        //3,判断是否为空
        if(cookies != null){//不为空,拿到上次登录时间
            for (Cookie cookie : cookies) {
                if(cookie.getName().equals("name")){
                    out.println("你上一次得访问时间是:"+cookie.getValue());
                }
            }
        }else {//为空设置登录时间
            out.println("这是你第一次登录");
        }
        Cookie cookie = new Cookie("name",System.currentTimeMillis()+"");
        cookie.setMaxAge(24*60*60);//设置保存最大时间,有效期关闭会话依然存在  24h 60min  60sec
        resp.addCookie(cookie);

    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        doGet(req, resp);
    }
}

手动删除cookie案例

public class CookieDemo02 extends HttpServlet {

    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) {
        Cookie cookie = new Cookie("name",System.currentTimeMillis()+"");
        cookie.setMaxAge(0);
        resp.addCookie(cookie);

    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        doGet(req, resp);
    }
}

 如果传递中文遇到乱码

URLEncoder.encode("我们","UTF-8");//编码
URLDecoder.decode(cookie.getValue(),"UTF-8");//解码

Session应用(重点)

测试设置session案例

存string也可以存对象

public class SessionDemo01 extends HttpServlet {

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

        //得到session
        HttpSession session = req.getSession();
        //给session中存东西
        session.setAttribute("name","我们");
        //获取session的Id
        String sessionId = session.getId();

        //判断session是不是新创建的
        if(session.isNew()){
            resp.getWriter().write("session创建成功,id="+sessionId);
        }else {
            resp.getWriter().write("session已经在服务器中存在了,id="+sessionId);
        }

        //session在创建的时候做了什么事
//        Cookie cookie = new Cookie("SESSIONID",sessionId);
//        resp.addCookie(cookie);
    }
    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws IOException {
        doGet(req, resp);
    }
}






//不同类去获取
public class SessionDemo02 extends HttpServlet {

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

手动删除session案例 

public class SessionDemo03 extends HttpServlet {

    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws IOException {
        //得到session
        HttpSession session = req.getSession();
        session.removeAttribute("name");//删掉其中一个元素
        session.invalidate();//注销   之前的session会被删掉,但会立马生成一个新得
    }
    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws IOException {
        doGet(req, resp);
    }
}

自动注销配置web.xml

<!--  设置sessionm默认得失效时间-->
  <session-config>
<!--    15分钟后session自动失效,以分钟为单位-->
    <session-timeout>15</session-timeout>
  </session-config>

 

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- huatuo9.cn 版权所有 赣ICP备2023008801号-1

违法及侵权请联系:TEL:199 18 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务