会话

  • 会话
    • 书面语: 一个终端用户与交互系统进行通讯的过程
    • 实例:用户打开一个浏览器,点击了很多个链接,访问了很多个网站,关闭浏览器,这个过程可以称为会话
  • 有状态会话
    • 书面语:一个交互系统能记住之前使用过的用户
    • 实例:用户打开了一个网页,又关闭了这个网页,第二次打开这个网页时网站知道这个用户之前登录过
  • 无状态会话

    • 与有状态会话相反

      保存会话的两种技术

  • cookie

    • 客户端技术
    • 响应,请求
  • session
    • 服务器技术
    • 利用这个技术,可以保存用户的会话信息,我们将信息或数据放在Session中
  • 常见实例:网站登录后,下次不需要再次登录

    Cookie

    cookie的创建

    Cookie - Session - 图1

    cookie的获取

    Cookie - Session - 图2

    cookie的限制

  • 一个cookie只能保存一个信息

  • 大部分浏览器的一个web站点只允许存储20个cookie
  • Cookie有大小限制4kb
  • 浏览器有cookie上限300

    删除Cookie

  • 不设置有效期,关闭浏览器,自动失效

  • 设置有效期为0 cookie.setMaxAge(0);

Session

什么是Session

  • 服务器会给每一个用户(浏览器)创建一个Session对象,保存在服务器端
  • 实例:一个用户登录之后,整个网站都可以访问

    Session的创建与获取

    Cookie - Session - 图3
  1. 浏览器第一次发送请求到服务器端,服务器端创建一个Session,同时会创建一个特殊的Cookie(name为JSESSIOND的固定值,value为session对象的ID),然后将该Cookie发送至浏览器端
  2. 浏览器第N次发送请求到服务器时,会携带name为JSESSION的Cookie对象
  3. 服务器端根据cookie对用的session_id查询Session对象,从而区分不同的用户
  4. 关闭浏览器后,原来name为JSESSION的cookie存储的session_id就会消失,也就不能再找到对应的Session,所以需要重新进行第一步
  5. 所以由于关闭浏览器不会导致服务器端的Session被删除,所以服务器会对Session设置一个失效时间。

    Session的相关使用

    ```java //得到Session HttpSession session = req.getSession(); //给Session中存东西 session.setAttribute(“name”,new Person(“哈哈哈”,1)); //获取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(“JSESSIONID”,sessionId); resp.addCookie(cookie);

//手动注销Session session.invalidate(); ```

Session与Cookie的区别

  • cookie数据保存在客户端,session数据保存在服务器端
  • session
    • 数据都保存在服务器端,客户端只发送session_id,以确定用户权限。不能伪造。
  • cookie
    • 数据都保存在客户端。若cookie存储了数据,发送请求时会将数据一起发送给用户端。这些数据有一定的特殊标记。服务器会解释为cookie变量。若能截获某用户的cookie变量,则可以伪造数据发送过去。
  • 将登录信息等重要信息放到Session,其他信息如果必要的话可以保存在cookie中