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保存到数据库java session如何保存数据_服务器


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

session保存到数据库java session如何保存数据_数据_02

 

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 :一次请求,存放错误处理。