一、简介
Session:在计算机中,尤其是在网络应用中,称为“会话控制”。Session对象存储特定用户会话所需的属性及配置信息。这样,当用户在应用程序的Web页之间跳转时,存储在Session对象中的变量将不会丢失,而是在整个用户会话中一直存在下去。当用户请求来自应用程序的 Web页时,如果该用户还没有会话,则Web服务器将自动创建一个 Session对象。当会话过期或被放弃后,服务器将终止该会话。Session 对象最常见的一个用法就是存储用户的首选项
二、session的基本定义
Session直接翻译成中文比较困难,一般都译成时域。在计算机专业术语中,Session是指一个终端用户与交互系统进行通信的时间间隔,通常指从注册进入系统到注销退出系统之间所经过的时间。以及如果需要的话,可能还有一定的操作空间。
需要注意的是,一个Session的概念需要包括特定的客户端,特定的服务器端以及不中断的操作时间。A用户和C服务器建立连接时所处的Session同B用户和C服务器建立连接时所处的Session是两个不同的Session。
session的工作原理:
(1)当一个session第一次被启用时,一个独一的标识被存储于本地的cookie中。
(2)首先使用session_start()函数,PHP从session仓库中加载已经存储的session变量。
(3)当执行PHP脚本时,通过使用session_register()函数注册session变量。
(4)当PHP脚本执行结束时,未被销毁的session变量会被自动保存在本地一定路径下的session库中,这个路径可以通过php.ini文件中的session.save_path指定,下次浏览网页时可以加载使用。
三、session基本机制
session机制采用的是在服务器端保持 HTTP 状态信息的方案。为了加速session的读取和存储,web服务器中会开辟一块内存用来保存服务器端所有的session,每个session都会有一个唯一标识sessionid,根据客户端传过来的jsessionid(cookie中),找到对应的服务器端的session。为了防止服务器端的session过多导致内存溢出,web服务器默认会给每个session设置一个有效期—30分钟,若有效期内客户端没有访问过该session,服务器就认为该客户端已离线并删除该session。
四、session的常用API
1.javax.servlet.http.HttpSession
接口:
2.setAttribute(String name, Object value)
: 将特定名称和值的对象存储到会话中。
3.getAttribute(String name)
: 根据名称从会话中获取对象。
4.removeAttribute(String name)
: 从会话中删除具有指定名称的属性。
5.invalidate()
: 无效化会话,删除会话中的所有对象。
6.getId()
: 获取会话的唯一标识符。
7.getCreationTime()
: 获取会话创建的时间戳。
8.getLastAccessedTime()
: 获取最后一次访问会话的时间戳。
9.setMaxInactiveInterval(int interval)
: 设置会话的最大非活动时间间隔(以秒为单位)。
10.getAttributeNames()
: 获取会话中所有属性的名称的枚举。
11.isNew()
: 检查会话是否为新创建的。
1.javax.servlet.http.HttpServletRequest
接口:
1.getSession()
: 返回与当前请求关联的会话对象。如果没有会话存在,则创建一个新的会话。
2.getSession(boolean create)
: 返回与当前请求关联的会话对象。如果create
参数为true
且没有会话存在,则创建一个新的会话;如果create
参数为false
且没有会话存在,则返回null
。
四、Session的生命周期
(1)public void setMaxInactiveInterval(long timeout)
设置 Session 的超时时间(以秒为单位),超过指定的时长,Session 就会被销毁。
值为正数的时候,设定 Session 的超时时长
负数表示永不超时(极少使用,因为如果不销毁就会一直占用内存空间)
(2)public int getMaxInactiveInterval()
获取 Session 的超时时间
(3)public void invalidate()
让当前 Session 会话马上超时无效
()Jps的session是使用bean的一个生存期限,一般为page,session意思是在这个用户没有离开网站之前一直有效,如果无法判断用户何时离开,一般依据系统设定,tomcat中设定为30分钟。
五、session的使用方法
Session 是 用于保持状态的基于Web服务器的方法。Session允许通过将对象储存在Web服务器的内存中在整个用户会话过程中保持任何对象。
Session通常用于执行以下操作
存储需要在整个用户会话过程中保持其状态的信息,例如登录信息或用户浏览Web应用程序时需要的其它信息。
存储只需要在页面重新加载过程中或按功能分组的一组页之间保持其状态的对象。
Session的作用就是它在Web服务器上保持用户的状态信息供在任何时间从任何设备上的页面进行访问。因为浏览器不需要存储任何这种信息,所以可以使用任何浏览器,即使是像Pad或手机这样的浏览器设备。
持久性方法的限制
随着越来越多用户登录,Session所需要的服务器内存量也会不断增加。
访问Web应用程序的每个用户都生成一个单独的Session对象。每个Session对象的持续时间是用户访问的时间加上不活动的时间。
如果每个Session中保持许多对象,并且许多用户同时使用Web应用程序(创建许多Session),则用于 Session持久性的服务器内存量可能会很大,从而影响了可伸缩性。