Servlet-平常笔记2java
会话:能够简单理解为一个用户,打开了一个浏览器,访问某一个站点,访问web资源,而后关闭浏览器,这个过程就是一个会话。web
会话跟踪:HTTP是无状态协议,也就是没有记忆力,这就产生了问题,每一个请求之间没法共享数据,在一个会话中,共享数据即会话跟踪。浏览器
1)使用参数在请求中传递:在资源名称后面添加参数。安全
格式:路径?参数名=参数值。session
而后在须要使用该数据的地方经过request的getParameter()方法获取该参数值。spa
2)使用Cookiecode
Cookie:把须要共享的数据,保留在客户端(浏览器)中。对象
步骤:接口
/*建立Cookie*/ Cookie c = new Cookie("currentname","test"); /*添加Cookie到响应中,传递给浏览器保存*/ response对象.addCookie(c); /*在请求中获取Cookie和数据*/ Cookie[] cs = request对象.getCookies();
/*修改Cookie指定名的value值*/
方法一:获取Cookie对象后使用setValue()方法更改。
方法二:从新建立一个同名的Cookie,覆盖原有的Cookie。
注意:修改以后,要调用response对象的addCookie()方法。生命周期
/*Cookie的生命周期*/
缺省状况:关闭浏览器后Cookie丢失。
可经过setMaxAge(int seconds)方法来设置,可设置值为正数、负数和0.
seconds>0:表示Cookie存活的时间。
seconds<0:表示存放在浏览器进程中,缺省状况。
seconds=0:表示删除Cookie。
/*Cookie的路径和域范围*/
Cookie对象.setPath(String path);
若不设置,则使用存放CookieServlet资源名的相对路径。
Servlet跳转时若路径不一样,则没法获取Cookies。
设置在整个应用中在请求的时候都鞋带Cookie的方法:
Cookie对象.setPath("/");
在不一样应用/主机之间如何共享Cookie?
经过设置域解决。
先了解一下二级域名,二级域名须要配置好虚拟主机,常见的有百度的二级域名,如music.baidu.com、tiebai.baidu.com,这些二级域名之间都会共享登录信息。
设置域的方法:
Cookie对象.setPath("/");
Cookie对象.setDomain(".baidu.com");
3)HttpSession类
javax.servlet.http.HttpSession
HttpSession技术实际上仍是利用Cookie技术
session是一种服务端技术,把共享数据保存在服务端。(Cookie是保存在客户端)
每个HttpSession对象,都有惟一的一个ID,是一个特殊的Cookie:
方法:
1.获取Session对象/建立Session对象。
HttpSession s = request对象.getSession(); 等同于getSession(true).
HttpSession s = request对象.getSession(true); 若是当前有Session对象,直接返回,不然建立一个。
HttpSession s = request对象.getSession(false); 若是当前有Session对象,直接返回,不然返回null。
2.存储数据到Session中
Session对象.setAttribute(String name, Object value);
3.从Session中获取数据
Object val = session对象.getAttribute(String name);
4.修改session中的数据
从新设置一个同名的属性名。
5. 删除Session
删除指定名称的数据:Session对象.removeAttribute(String name);
删除整个Session对象:Session对象.invalidate(); 经常使用于注销登陆
6.Session拓展
封装多个信息做为对象存储到Session中。
通常咱们习惯把Session对象让他实现序列化接口(java.io.Serializable),缘由是当多态服务集群的时候,彼此之间能够共享Session数据。
序列化:把对象转换为二进制数据。
反序列化:把二进制数据恢复成对象。
该接口没有方法。
7.Session超时管理
Session对象.setMaxInactiveInterval(int seconds);
表示上一次操做以后,指定时间内无交互,则Session会被自动销毁。(保证安全,释放内存)
1.参数传递的方法会暴露敏感信息,不可行。
2.Cookie也面临许多问题:一个Cookie只能存储一个简单类型的数据,value只能存String类型,当对象有多个属性时则不可行;Cookie的大小限制在4KB以内浏览器保存Cookie的个数也有限多人使用一台电脑,也会致使信息不安全。
3.Tomcat中的Session默认超时时间为30分钟,通常20来分钟就销毁了。