• Web学习之Session


    1,什么是Session

    Session一般译为会话,是解决Http协议的无状态问题的方案,可以将一次会话中的数据存储在服务器端的内存中,保证在下一次的会话中可以使用。

    在客户端浏览器第一次向服务器端发送请求时,服务器端会为这个客户端创建独有的Session,并具有唯一的Session ID,存储在服务器端的内存中。在客户端第二次访问服务器端时,会携带Session ID在请求中,服务器端会根据Session ID查找对应的Session信息,进行进一步地操作。

    在JavaEE中提供了javax.servlet.http.HttpSession接口,通过该接口可以将共享的数据内容存储在HttpSession对象中,从而解决Http协议的无状态问题

    2,Session与cookie的区别

    Session与Cookie都是解决Http协议的无状态问题,但是两者之间还是存在一定区别的:

    • Cookie数据存储在客户端的浏览器内存中或本地缓存文件中,Session数据存储在服务器端的内存中。
    • Cookie数据存储安全性较低,Session数据存储安全性较高。
    • Session数据存储在服务器端内存中,访问增多时,降低服务器端性能。而Cookie则不会对服务器端性能造成影响。
    • 单个Cookie存储的数据最大是4KB,一个网站只能存储20个Cookie。Session则没有这个问题。
    • Session在关闭浏览器时失效,而持久Cookie则可以存储更长有效时间。

    总的来说,Session与Cookie各有优势,不能简单来说谁更优。具体用法要考虑具体案例情况而定。

    3,Session的实现原理

    在idea中使用上一个程序进行调试,访问servlet并抓取内容,最后发现实际得到的是org.apache.catalina.session.StandardSession对象,该对象是由Tomcat服务器的Session池创建,并为该对象创建唯一的ID值。

     最后结论:

    因为Session使用的是会话Cookie,所以当浏览器关闭后,Session会失效。重新打开浏览器访问对应Servlet时,服务器端会重新创建Session对象。可以使用持久Cookie来延长Session的有效时间。

    3,Session的额生命周期

    • Session的创建:在客户端第一次向服务器端发送请求,并执行request.getSession()方法时。
    • Session的销毁:
      • 不正常关闭浏览器时。(正常关闭浏览器,Session信息被序列化到硬盘中,保存在Tomcat服务器安装目录/work目录)
      • Session信息过期时(Session默认的有效时间为30分钟)。

          可以利用setMaxInactiveInterval(int interval)方法设置Session的有效时间。

      • 在服务器端程序中执行session.invalidate()方法,手动销毁Session对象。

    摘抄自:https://www.cnblogs.com/aaron911/p/7889353.html

    由于还在初学阶段,对session的理解还不太透彻,只好通过别人已有的总结来理解session。

  • 相关阅读:
    IntentService使用以及源码分析
    Android HandlerThread源码解析
    Android Handler消息机制源码解析
    Gradle技术之四
    Android EditText实现小数点后几位的终级方案
    Gradle系列之三 Gradle概述以及生命周期
    Gradle系列之二 Groovy对文件的操作
    Gradle系列之一 Groovy语法精讲
    Context源码分析
    用EXCLE群发outlook邮件
  • 原文地址:https://www.cnblogs.com/sunny-daylk/p/8647608.html
Copyright © 2020-2023  润新知