JavaWeb学习4
session和cookie
session
什么是会话?
用户打开浏览器,进行一系列操作,然后最终将浏览器关闭,整个过程称为一次会话。会话在服务器端也有一个对应的java对象,这个java对象叫做:session。
什么是一次请求:用户在浏览器上点击了一下,然后到页面停下来,可以粗略认为是一次请求。请求对应的服务器端的java对象是:request。
一个会话当中包含多次请求。(一次会话对应N次请求。)
- 在java的servlet规范当中,session对应的类名:HttpSession(jarkata.servlet.http.HttpSession)
- session机制属于B/S结构的一部分。如果使用php语言开发WEB项目,同样也是有session这种机制的。session机制实际上是一个规范。然后不同的语言对这种会话机制都有实现。
- session对象最主要的作用是:保存会话状态。(用户登录成功了,这是一种登录成功的状态,你怎么把登录成功的状态一直保存下来呢?使用session对象可以保留会话状态。)
为什么不使用request对象保存会话状态?为什么不使用ServletContext对象保存会话状态?
- equest.setAttribute()存,request.getAttribute()取,ServletContext也有这个方法。request是请求域。ServletContext是应用域。
- request是一次请求一个对象。
- ServletContext对象是服务器启动的时候创建,服务器关闭的时候销毁,这个ServletContext对象只有一个。
- ServletContext对象的域太大。
- request请求域(HttpServletRequest)、session会话域(HttpSession)、application域(ServletContext)
○ request < session < application
三个域
- request(对应的类名:HttpServletRequest) 请求域(请求级别的)
- session(对应的类名:HttpSession)会话域(用户级别的)
- application(对应的类名:ServletContext)应用域(项目级别的,所有用户共享的。)
- 这三个域对象的大小关系 request < session < application
- 他们三个域对象都有以下三个公共的方法:
■ setAttribute(向域当中绑定数据)
■ getAttribute(从域当中获取数据)
■ removeAttribute(删除域当中的数据) - 使用原则:尽量使用小的域
Cookie禁用了,session还能够被找到吗?
找不到了。每一次请求都会获取到新的session对象。
Cookie禁用了,如何来实现session机制?
使用URL重写机制。
cookie
- cookie最终是保存在浏览器客户端上的。
- 可以保存在运行内存中。(浏览器只要关闭cookie就消失了。)
也可以保存在硬盘文件中。(永久保存。)
- 可以保存在运行内存中。(浏览器只要关闭cookie就消失了。)
- cookie作用
- cookie和session机制其实都是为了保存会话的状态。
cookie是将会话的状态保存在浏览器客户端上。(cookie数据存储在浏览器客户端上的。)
session是将会话的状态保存在服务器端上。(session对象是存储在服务器上。)
-
为什么同时存在session和cookie两种机制呢
因为HTTP协议是无状态 无连接协议。 -
cookie失效
- 十天过后自动失效,改密码或者在客户端浏览器上清除cookie。