Session

Session 是什么 ?

 代表服务器与浏览器之间的一次会话过程,这个过程可以是连续的,也可以是时断时续的。而在 Web 开发语境下,则指一类用来在客户端与服务器之间保持状态的解决方案

多样的存在形式

  • Java

    1
    javax.servlet.http.HttpSession
  • Python

    1
    s = requests.session()
  • PHP

    1
    $_session
  • Hibernate

    1
    org.hibernate interface Session
  • WebLogic

    1
    Weblogic Server session
  • JSP

    1
    HttpSession

为什么要有 Session ?

 HTTP 本身是无状态的,这与 HTTP 协议本身的目的是相符的
 当客户每次访问 Web 页面,服务器重新打开新的会话时,为了维护其上下文信息(记住同一个用户)
 由于此类种种场景,需要让 HTTP 协议成为有状态的

Session 工作原理

 Session 机制是一种服务器端的机制,服务器使用一种类似于散列表的结构来保存信息

Session

踩过的坑

Session 的创建

 不是在客户端访问 Server 的时候就创建,而是在服务器的某个构建 Session 的语句被调用时

  • PHP

    1
    session_start()
  • JSP

    1
    内置对象 Session
  • Java

    1
    HttpServletRequest.getSession(true)
  • Hibernate

    1
    new Configuration.configure("hibernate.cfg.xml").buildSessionFactory().openSesssion()

SSOSingle Sign-on)

 按照 Servlet 规范,Session 的作用域应该仅仅限于当前应用程序下,不同的应用程序之间是不能够相互访问对方的 Session 的
 各个应用服务器从实际效果上都遵守了这一规范,但是实现的细节却可能各有不同,因此解决跨应用程序 Session 共享的方法也不尽相同
 可以借助于第三方的力量,比如使用文件、数据库、JMS 或者客户端 cookie,URL 参数或者隐藏字段等手段
 还有一种较为方便的做法,就是把一个应用程序的 Session 放到 ServletContext 中取得前一个应用程序的引用

欢迎加入我们的技术群,一起交流学习

人工智能 (高级)& (进阶)| BigData | 算法

Benedict Jin wechat
Subscribe to my blog by scanning my public wechat account.