* 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

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

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


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

* 完成简单的购物车

* 购物车 Map<String,Integer> cart 购物车,把购物车存入seesion中。
* 获取数据
* 判断是否是第一次访问    session.getAttribute("cart");
  * 如果第一次访问,cart 创建一个购物车,放入商品的名称和数量
  * 如果不是第一次访问,cart!=null
判断是否包含该商品?
   * 如果包含,数量拿出来,++,放回去,存入seesion中
   * 如果不包含,正常放入到购物车中。存入seesion中

相关文章: