Session 是什么?
代表服务器与浏览器之间的一次会话过程,这个过程可以是连续的,也可以是时断时续的。而在 Web 开发语境下,则指一类用来在客户端与服务器之间保持状态的解决方案
多样的存在形式
1
| javax.servlet.http.HttpSession
|
1
| org.hibernate interface Session
|
为什么要有 Session ?
HTTP 本身是无状态的,这与 HTTP 协议本身的目的是相符的
当客户每次访问 Web 页面,服务器重新打开新的会话时,为了维护其上下文信息(记住同一个用户)
由于此类种种场景,需要让 HTTP 协议成为有状态的
Session 工作原理
Session 机制是一种服务器端的机制,服务器使用一种类似于散列表的结构来保存信息
(利用 WPS™ 绘制而成)
踩过的坑
Session 的创建
不是在客户端访问 Server 的时候就创建,而是在服务器的某个构建 Session 的语句被调用时
1
| HttpServletRequest.getSession(true)
|
1
| new Configuration.configure("hibernate.cfg.xml").buildSessionFactory().openSesssion()
|
SSO(Single Sign-on)
按照 Servlet 规范,Session 的作用域应该仅仅限于当前应用程序下,不同的应用程序之间是不能够相互访问对方的 Session 的
各个应用服务器从实际效果上都遵守了这一规范,但是实现的细节却可能各有不同,因此解决跨应用程序 Session 共享的方法也不尽相同
可以借助于第三方的力量,比如使用文件、数据库、JMS 或者客户端 cookie,URL 参数或者隐藏字段等手段
还有一种较为方便的做法,就是把一个应用程序的 Session 放到 ServletContext 中取得前一个应用程序的引用
群名称 |
群号 |
人工智能(高级) |
|
人工智能(进阶) |
|
BigData |
|
算法 |
|