保存会话数据的两种技术之session

session(服务器) 

WEB 开发中,服务器可以为 每个用户浏览器 创建一个 会话 对象( session 对象),注意: 一个浏览器独占一个 session 对象 ( 默认情况下 ) 。因此,在需要保存用户数据时,服务器程序可以把用户数据写到用户浏览器独占的 session 中,当用户使用浏览器访问其它程序时,其它程序可以从用户的 session 中取出该用户的数据,为用户服务。

Session和Cookie的主要区别在于:

Cookie 是把用户的数据写给用户的浏览器。
Session 技术把用户的数据写到用户独占的 session 中(服务器端)。

有了session,就不用使用Cookie来跟踪会话了!但是session不能像Cookie那样长命,一旦用户关闭浏览器窗口,那么session就死掉了

* cookie基于客户端,不安全,并且大小和个数的限制
* session域对象,范围一次会话范围,存个人相关的数据。
* setAttribute(String name, Object value) 
* Object getAttribute(String name)  
* String getId()  获取seesion的唯一的ID

* void invalidate()  销毁的seesion

session的范围大于request,可以在一个会话中多个请求之间共享数据。但session的范围小于application,session不能在多个用户之间共享数据。

使用request.getSession()方法就可以获取session对象。

Session 对象由服务器创建,开发人员可以调用 request 对象的 getSession 方法得到 session 对象。

Session的实现原理,本身也是基于cookie的,利用cookie回写了一个JSESSIONIDJESSIONID就是为每个seesion起一个唯一的标识)

 

Servlet的数据访问范围

1,applicationScope  servletContext ( 数据库连接池,配置 , 线程池 , 站点访问次数 )
每一个 Web 应用对应一个 ServletContext
存放所有用户都可以访问的数据
2,sessionScope HttpSession (存放与用户相关数据)
存放每个用户自己会话过程中的数据
3,requestScope  HttpServletRequest
4, (Servlet 处理结果, JSP 显示
数据存放在 request 对象中
生成新的请求时,原 request 存放数据丢失,

ServletContext存放的数据,共享于整个web应用中。

只要服务器不重启,存放在ServletContext中的数据就一直有效,并且所有用户都可以访问ServletContext中存放的数据。

因为同一web应用仅有一个ServletContext,当多用户访问时,会有线程问题,ServletContext不是线程安全的,当然我们也可以使用synchronized关键字来同步doGet()doPost()方法,解决线程安全问题。

例如:数据库的连接、当前在线用户数、系统管理员联系方式。

Session是同一用户在一次会话期间内,在web应用的各个资源之间都可以共享的数据范围。使用Session就不需要像Request那样通过转发请求来传递数据,当使用链接或者新提交Form表单时,原来Session中的数据,对于当前用户仍然可用。

注意:Session中的数据仅对当前用户可见。

存放在Request之中的数据存活范围

1.使用HttpServletRequest对象的getRequestDispatcher()方法得到RequestDispatcher对象,并调用该对象的forward()方法和include()方法时。当前页面的HttpServletRequest对象中数据可以在目标页面使用。

2.当使用链接,或者重新提交一个Form时,当前的页面的Request对象就会被销毁,其中的数据全部丢失,并生成新的请求。

session


session的创建和销毁
* 第一次访问资源,调用request.getSession(),创建session
销毁
1,* 非正常关闭服务器()
2,* session的过期,默认是30分钟。

<session-config>
    <session-timeout>30</session-timeout>
</session-config>


3* 调用session.invalidate() 手动销毁session

session的域对象

ServlerContext :代表整个web应用,数据库链接

session :一次会话,存放个人的信息。

request :一次请求,存放错误处理。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值