javaEE-session与Cookie

为什么要有会话?

服务端同时接收大量的客户端请求,如何来区分哪些请求来自于同一个会话?能识别出来自同一个客户端的访问请求,这就需要客户端对其发出的每个请求进行标识,属于同一个会话中的请求都有相同的标识号,这就是 sessionID。

让服务端通过获取Cookie里的JSESSIONID,来区分不同的客户端。防止出现数据错乱,例如:张三的商品不能加到李四的购物车里面。

session

setAttribute

getAttribute

removeAttribute

invalidate //设置 session 失效,当用户执行退出登录时,调用该方法

session 常用方法:

  • String getId() //获取sessionID

  • void setMaxInactiveInterval(int interval) //设置 session 失效时间,单位是秒

  • int getMacInactiveInterval() //获取 session 时间

  • void setAttribute(String key,Object value) //在 session 中以键值对的形式存储数据

  • Object getAttribute(String key) //通过 key 值获取 session 中保存的数据

  • void removeAttribute(String key) //通过 key 值移除 session 中保存的数据

      实际开发中,普通的业务数据传递一般选择 request,需要结合转发完成资源的跳转。登录成功之后的用户信息,一般选择 session的ConcurrentHashMap<K, V>集合属性,无论是转发还是重定向,没有区别,都可以从 session 中取出数据。
    


 	<%
        //多个页面访问session.jsp,    sessionId相同。不同浏览器,sessionId不相同。
        String sessionId = session.getId();
        int timeout = session.getMaxInactiveInterval(); //默认1800秒。
        session.setMaxInactiveInterval(1000);
        timeout = session.getMaxInactiveInterval();

    %>
    <%=timeout%>       <!--1000-->
    

面试题:浏览器关闭,session就销毁了?     NO!

  • 我们知道Session是存在于服务器端的,当把浏览器关闭时,浏览器并没有向服务器发送任何请求来关闭Session,自然Session也不会被销毁,但是可以做一点努力,在所有的客户端页面里使用js的window.onclose来监视浏览器的关闭动作,然后向服务器发送一个请求来关闭





Cookie

安全性不好,因为他是由Server端产生,存在于浏览器中,在浏览器安装目录Cookie文件下可见。
而session是存在于Server端的。

  • void setMaxAge(int age) 设置 Cookie 的有效期,以秒为单位

  • int getMaxAge() 获取 Cookie 的有效期,默认-1 表示一直存在。

  • void setValue(String value) 修改 Cookie 的 value 值

  • String getName() 获取 Cookie 的 name 值

  • String getValue() 获取 Cookie 的 value 值

cookie.jsp:


		Cookie cookie = new Cookie("name","zhangsan");
        response.addCookie(cookie);
        session.setAttribute("cookie",cookie);
        //重定向方式,看到的效果明显。
        response.sendRedirect("index.jsp");
        

注意:Cookie中不能存中文。

index.jsp:


		  Cookie cookie = (Cookie) session.getAttribute("cookie");
          cookie.setValue("lisi");
          response.addCookie(cookie);
          out.write(cookie.getName()+"="+cookie.getValue());//	name=lisi
              




Session 和 Cookie 的区别

Session 和 Cookie 的联系是通过JSESSIONID,用火狐测。

Session 保存在服务端,Cookie 保存在客户端。

Session 存储的数据类型 Object,Cookie 只能存储 String

Session 会随着会话的结束而销毁,Cookie 可长期保存在客户端浏览器中

Session 保存重要信息,Cookie 保存不重要的信息

©️2020 CSDN 皮肤主题: 1024 设计师:上身试试 返回首页