zoukankan      html  css  js  c++  java
  • 7 Servlet 会话技术

     

    1 什么是会话

      用户开一个浏览器访问某个网站,点击多个链接,访问服务器多个web资源,然后关闭浏览器,整个过程称之为会话,与打电话类似。会话过程要解决一些问题,

    每个用户在使用浏览器与服务器进行会话时,会产生一些数据,服务器需要为每个用户保存这些数据。Servlet 保存会话信息的技术有:session 与 cookie。

     

    2 cookie

    ① 为什么需要cookie 技术

    • 登录网站时显示用户最后一次登录时间,不同的用户显示的最后一次登录时间不同;
    • 访问购物网站时,如何保存用户曾经浏览过的商品,并且显示给用户;
    • 登录网站时,显示需要保存登录信息多久;

    ② 什么是 cookie

    cookie 是客户端技术,服务器端把每个用户的信息(登录名,密码等)以cookie 的形式保存在客户端的浏览器缓存目录下的,在需要的时候可以从客户端读取。

     

    ③ cookie 工作流程

      ④ cookie 使用

      cookie 像一张表,分两列,一个是名字,一个是值,数据类型都为String。

      cookie 的创建与读取

    1 //创建Cookie 对象
    2 Cookie cook = new Cookie("name","latiny1");
    3 //设置Cookie生命周期
    4 cook.setMaxAge(3600);
    5 //将cook返回给浏览器
    6 response.addCookie(cook);
    7 
    8 //读取Cookie
    9 Cookie[] cookies = request.getCookies();

      ⑤ cookie 的特点 

    • cookie是在服务器端创建的;
    • cookie 是保存在浏览器端的(客户端);
    • cookie可以被多个浏览器共享;
    • cookie 重名会覆盖掉之前的cookie,只有最后一个有效;
    • cookie存放时以明文的形式存放,因此安全性比较低;
    • 一个浏览器最多放300个Cookie,一个站点最多放20个cookie,一个cookie大小限制在4K。
    • Cookie默认的生命周期是会话级别(浏览器关闭时,cookie就会被一起删除);通过setMaxAge()可以设置生命周期,设置为0或者负数时,代表清除客户端的cookie。

     

    3 session 

    ① 为什么需要session

    如何实现在不同的页面可以查看信息(如购物车),不同的用户看到的信息不一样。

     

    ② 什么是session

      Session是服务端技术,服务器在运行时可以为每个用户的浏览器创建一个独享的session对象,由于session为用户浏览器独享,所以用户在访问服务器资源时,可以把各自的数据放在各自的session中,当用户再去访问服务器中的其他web资源时,其他web资源再从用户各自的session中取出数据为用户服务。

     

     ③ session 的特点

    • session是放在服务器内存中的;
    • 一个用户浏览器独享一个session域对象;
    • session 生命周期指的从最后一次访问或者操作session 时计算,默认为30minutes,可以通过web.xml修改;

    a.  修改 tomcat/cnf/web.xml修改,对所有web应用生效

    1 <session-config>
    2     <session-timeout>30</session-timeout>
    3 </session-config>

      b. 修改自己项目的web.xml 文件

    <session-config>
       <session-timeout>1</session-timeout>
     </session-config>

      如果两边配置不一致,则以自己项目配置为准。

      c. 在代码里设置

    //设置session的有效时间,从最后一次使用开始计算
    session.setMaxInactiveInterval(60);

       

    • session 失效指的整个session失效,而不只是session的某个属性失效;通过函数se.invalidate() 强制整个session失效,通常用于安全退出;设置session 某个属性失效,se.removeAttribute("name"); 重启tomcat,reload web 应用,关机等操作,session都会失效;

      ④ session 的使用

      获取创建session

    //获取session
    HttpSession se = request.getSession();
    se.setAttribute("name","latiny");

      使用session 

    //获取使用 session
    HttpSession se = request.getSession();
    String name=(String)se.getAttribute("name");

      

      ⑤ session 实际应用

    a. 网上商城购物车

    b. 保存用户登录信息

    c. 放入某些需要的信息供同一个用户的各个页面使用

    d. 防止用户非法登录到某个页面

      ⑥ 禁用Cookie 之后怎么实现购物车功能(购物车要通过session 来实现,而session的信息的传递需要cookie协助),使用encodeURL

      a. 在发送页面加入以下代码

    //访问以下session
    request.getSession();
    String url = response.encodeURL("/ShopCart/BookHandle?id="+book.getId());

      b. 在接受页面对url使用encode

    String url = response.encodeURL("/ShopCart/ShowBook");
    out.println("<a href='"+url+"' >返回商品页面</a></br>");

      4 Session 与 Cookie 总结

    ① 存储位置不一样

    Cookie存在客户端浏览器的临时文件下。

    Session存在服务器端的内存中,一个session域对象为一个用户浏览器服务。

     

    ② 存放形式

    session是以对象的形式保存在服务器,cookie以字符串的形式保存在客户端。

     

    ③ 用途

    session 一般用来做客户身份验证,cookie适合保存用户的个人设置,如爱好,登录有效期等。

     

    ④ 大小及数量限制

    单个cookie在客户端的大小有限制,cookie的个数浏览器也有限制;session理论上没有限制,跟服务器端内存有关。

    ⑤ 安全性

    Cookie 以明文方式存放在客户端的,安全性较低;可以通过加密算法加密之后再存放。MD5

    Session 存放在服务器内存中,安全性相对较高。

    ⑥ 生命周期

    Cookie 生命周期是累计的,从创建时就开始计时,例如它的生命周期为30分钟,则从创建时开始计时,30分钟后失效。

    Session 生命周期是间隔时间,即从用户最后一次访问session开始计时,例如它的生命周期为30分钟,则30分钟内没有用户访问,它才会失效。关闭tomcat;reload web应用;时间到;调用invalidate方法。

    ⑤ 访问范围

    Session 为一个用户浏览器独享

    Cookie 为多个用户浏览器共享

    ⑥ 使用原则

    因为Session 会占用服务器内存,因此尽量少使用session,不要在session存放过多过量的数据,会影响性能。

     

    session与cookie的联系

    session需要借助cookie才能正常工作,如果客户端完全禁止cookie,session将会失效,因为session是由应用服务器维持的一个服务端的存储空间,用户在连接服务器时,会由服务器生成唯一的session id,用该session id为标识来存取服务端的session空间。而session id存储在cookie中,用户提交页面时会将这个sesssion id提交到服务端,来存取session数据,这一过程是不用开发人员干预的。

     

     

     

  • 相关阅读:
    简易聊天客户端程序
    java 多线程使用方法及Socket的使用
    跟着音乐节奏随机的产生不同颜色形状的图形
    移动小圆圈
    在一个frame设置四个组件
    触发按钮改变panel面板上的小圆圈颜色
    借助bootstrap框架模仿airbnb写的网页
    攻击DotCom小游戏
    mit java open course assignment #4
    FPS 游戏实现GDI透视
  • 原文地址:https://www.cnblogs.com/Latiny/p/8454994.html
Copyright © 2011-2022 走看看