Session

Session 是什么 ?

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

多样的存在形式

  • Java
javax.servlet.http.HttpSession
  • Python
s = requests.session()
  • PHP
$_session
  • Hibernate
org.hibernate interface Session
  • WebLogic
Weblogic Server session
  • JSP
HttpSession

为什么要有 Session ?

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

Session 工作原理

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

https://picture.yuzhouwan.com/2014-11-15/session.png?imageslim

踩过的坑

Session 的创建

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

  • PHP
session_start()
  • JSP
内置对象 Session
  • Java
HttpServletRequest.getSession(true)
  • Hibernate
new Configuration.configure("hibernate.cfg.xml").buildSessionFactory().openSesssion()

SSO(Single Sign-on)

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

欢迎直接访问我的个人博客,阅读效果更佳:https://yuzhouwan.com/posts/48905/

你可能感兴趣的:(Session)