一、会话概述
1、用户开一个浏览器,点击多个超链接,访问服务器的多个WEB资源,
然后关闭浏览器,整个过程称为一个会话
2、学习会话要解决的问题:会话过程中的数据保存。
二、Cookie和HttpSession简介
1、Cookie是客户端技术,程序把每个用户的数据以cookie的形式写给用户各自的浏览器。
当用户使用浏览器再去访问服务器中的web资源时,就会带着各自的数据去。
这样,web资源处理的就是用户各自的数据了。
2、Session是服务器端技术,利用这个技术,服务器在运行时可以为每一个用户的浏览器
创建一个其独享的HttpSession对象,由于session为用户浏览器独享,所以用户在访问
服务器的web资源时,可以把各自的数据放在各自的session中,当用户再去访问服务器
中的其它web资源时,其它web资源再从用户各自的session中取出数据为用户服务。
3、区别:
Cookie是把用户的数据写给用户的浏览器
Session把用户的数据写到用户独占的session中
![](https://img-blog.csdn.net/20150909172939789?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
![](https://img-blog.csdn.net/20150909173021180?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
三、Cookie详细介绍
javax.servlet.http.Cookie
1、Cookie是什么?
一个小信息,由服务器写给浏览器的。由浏览器来保存。
客户端保存的Cookie信息,可以再次带给服务器。
2、Cookie的属性:
name: 必须的
value: 必须的
comment: 可选的。注释
domain:可选的。该Cookie所属的网站域名。(itcast.cn)默认值。
maximum age:可选的。不设置就是会话过程(存在浏览器的内存中)。单位是秒
如果是0,说明要删除。
如果是Interger.MAX_VALUE 则是永久存储。
version:可选的。
path: 可选的。
写Cookie的程序的访问路径是:http://localhost:8080/day07/servlet/CookieDemo1
其中:localhost就是域名;
未设置时的cookie的默认路径:/day07/servlet
访问的地址的URI.startWith(cookie的路径),为true就带cookie
比如IE存的cookie的路径是/day07
现在访问的地址是:http://localhost:8080/day07/servlet/CookieDemo1 带cookie
现在访问的地址是:http://localhost:8080/day07/CookieDemo1 带
比如IE存的cookie的路径是/day07/servlet/
现在访问的地址是:http://localhost:8080/day07/servlet/CookieDemo1 带
现在访问的地址是:http://localhost:8080/day07/CookieDemo1 不带
如果一个Cookie的路径设置成了/day07,意味着:当前应用下的所有资源浏览器都会带着它给服务器。
3、如何向客户端写Cookie:
HttpServletResponse.addCookie(javax.servlet.http.Cookie)
(就是写了一个响应消息头:Set-Cookie:cookie的信息)
特点:一个浏览器针对一个网站最多存20个Cookie;
最多存300个Cookie,每个Cookie的长度不能超过4KB。(稀缺)
4、服务器得到客户端传来的Cookie的方法:
HttpServletRequest.getCookies() (注: 是一个数组,不能获得单独的cookie)
例:取到指定的Cookie lastAccessTime的值,打印到页面上
Cookie cs[] = request.getCookies();
for (int i = 0; cs != null && i < cs.length; i++) {
Cookie c = cs[i];
if ("lastAccessTime".equals(c.getName())) {
String value = c.getValue();
out.print(new Date(time).toLocaleString());
}
}
5、如何区分Cookie:通过名称不行。
domain+path+name来区分的。
localhost/day07/servlet/lastAccessTime
四、Cookie案例:
5.1记住用户最后一次的访问时间,并清空指定cookie;
5.2记住用户登录时的用户名
5.3电商网站:记住用户商品的历史浏览记录
五、各种URL地址的写法
相对路径
绝对路径:(建议的)
绝对路径怎么写?什么时候需要加上应用名称"/day07"?
原则:地址是不是给服务器用的,如果是,"/"就代表着当前应用。如果是给客户端用的绝对路径要加上应用名称。
<link href=path/> 要加/day07
<script src=path/> 要加/day07
<img src=path/> 要加/day07
<a href=path/> 要加/day07
<form action=path/> 要加/day07
RequestDispatcher.include(path) 不要加,"/"就代表着当前应用
RequestDispatcher.forward(path) 不要加,"/"就代表着当前应用
HttpServletResponse.sendRedirect(path) 要加/day07(请求重定向,浏览器的行为)
ServletContext.getRealPath(path) 不要加,"/"就代表着当前应用
六 HttpSession概述及原理探讨
得到HttpSession对象:
HttpServletRequest.getSession():
根据特殊Cookie(JSESSIONID=HttpSession对象的id,由服务器生成,唯一的)的取值,
在服务器的内存中根据id查找这个HttpSession对象,找到了,取出来继续服务;
没有找到,创建一个新的HttpSession对象。
注: 该sessionid可以有session.getId();获得;
session在关闭浏览器后默认存在内存中半小时,可以自己配置
HttpServletRequest.getSession(boolean b):
如果b为true,与上面方法功能完全一致。如果为false,只查询。
例:
ServletA
HttpSession session = request.getSession();
session.setAttribute("p","ppp");
ServletB
HttpSession session = request.getSession();
String value = (String)session.getAttribute("p");
// 摧毁HttpSession对象
request.getSession().invalidate();
// 只是删除了域中的一个绑定对象
request.getSession().removeAttribute("user");
七、HttpSession案例(*****)
完成用户的一次性登录(随机验证码验证)(*****)
简单购物原理案例 (*****)
防止表单的重复提交(Base64编码+MD5加密)(*****)
java.util.UUID:通用的唯一标识符
八、客户端禁用Cookie后的会话数据保存问题 (*****)
客户端禁用Cookie对http://localhost访问的无效
解决办法:
url---->url;JSESSIONID=123:URL重写.必须对网站中的所有URL地址都重写。
HttpServletResponse.encodeURL(url):是一个智能方法。判断用户是否禁用了Cookie,
没有禁用,则不重写;禁用了就重写。
网站主页:为了更好访问本网站,请不要禁用您的Cookie。
九、HttpSession对象的状态及转换(序列化) (*****)
修改web.xml
<session-config>
<session-timeout>1</session-timeout><!--自然整数,单位是分钟-->
</session-config>
2、 javaBean中的类要实现Serializable接口
1、用户开一个浏览器,点击多个超链接,访问服务器的多个WEB资源,
然后关闭浏览器,整个过程称为一个会话
2、学习会话要解决的问题:会话过程中的数据保存。
二、Cookie和HttpSession简介
1、Cookie是客户端技术,程序把每个用户的数据以cookie的形式写给用户各自的浏览器。
当用户使用浏览器再去访问服务器中的web资源时,就会带着各自的数据去。
这样,web资源处理的就是用户各自的数据了。
2、Session是服务器端技术,利用这个技术,服务器在运行时可以为每一个用户的浏览器
创建一个其独享的HttpSession对象,由于session为用户浏览器独享,所以用户在访问
服务器的web资源时,可以把各自的数据放在各自的session中,当用户再去访问服务器
中的其它web资源时,其它web资源再从用户各自的session中取出数据为用户服务。
3、区别:
Cookie是把用户的数据写给用户的浏览器
Session把用户的数据写到用户独占的session中
三、Cookie详细介绍
javax.servlet.http.Cookie
1、Cookie是什么?
一个小信息,由服务器写给浏览器的。由浏览器来保存。
客户端保存的Cookie信息,可以再次带给服务器。
2、Cookie的属性:
name: 必须的
value: 必须的
comment: 可选的。注释
domain:可选的。该Cookie所属的网站域名。(itcast.cn)默认值。
maximum age:可选的。不设置就是会话过程(存在浏览器的内存中)。单位是秒
如果是0,说明要删除。
如果是Interger.MAX_VALUE 则是永久存储。
version:可选的。
path: 可选的。
写Cookie的程序的访问路径是:http://localhost:8080/day07/servlet/CookieDemo1
其中:localhost就是域名;
未设置时的cookie的默认路径:/day07/servlet
访问的地址的URI.startWith(cookie的路径),为true就带cookie
比如IE存的cookie的路径是/day07
现在访问的地址是:http://localhost:8080/day07/servlet/CookieDemo1 带cookie
现在访问的地址是:http://localhost:8080/day07/CookieDemo1 带
比如IE存的cookie的路径是/day07/servlet/
现在访问的地址是:http://localhost:8080/day07/servlet/CookieDemo1 带
现在访问的地址是:http://localhost:8080/day07/CookieDemo1 不带
如果一个Cookie的路径设置成了/day07,意味着:当前应用下的所有资源浏览器都会带着它给服务器。
3、如何向客户端写Cookie:
HttpServletResponse.addCookie(javax.servlet.http.Cookie)
(就是写了一个响应消息头:Set-Cookie:cookie的信息)
特点:一个浏览器针对一个网站最多存20个Cookie;
最多存300个Cookie,每个Cookie的长度不能超过4KB。(稀缺)
4、服务器得到客户端传来的Cookie的方法:
HttpServletRequest.getCookies() (注: 是一个数组,不能获得单独的cookie)
例:取到指定的Cookie lastAccessTime的值,打印到页面上
Cookie cs[] = request.getCookies();
for (int i = 0; cs != null && i < cs.length; i++) {
Cookie c = cs[i];
if ("lastAccessTime".equals(c.getName())) {
String value = c.getValue();
out.print(new Date(time).toLocaleString());
}
}
5、如何区分Cookie:通过名称不行。
domain+path+name来区分的。
localhost/day07/servlet/lastAccessTime
四、Cookie案例:
5.1记住用户最后一次的访问时间,并清空指定cookie;
5.2记住用户登录时的用户名
5.3电商网站:记住用户商品的历史浏览记录
五、各种URL地址的写法
相对路径
绝对路径:(建议的)
绝对路径怎么写?什么时候需要加上应用名称"/day07"?
原则:地址是不是给服务器用的,如果是,"/"就代表着当前应用。如果是给客户端用的绝对路径要加上应用名称。
<link href=path/> 要加/day07
<script src=path/> 要加/day07
<img src=path/> 要加/day07
<a href=path/> 要加/day07
<form action=path/> 要加/day07
RequestDispatcher.include(path) 不要加,"/"就代表着当前应用
RequestDispatcher.forward(path) 不要加,"/"就代表着当前应用
HttpServletResponse.sendRedirect(path) 要加/day07(请求重定向,浏览器的行为)
ServletContext.getRealPath(path) 不要加,"/"就代表着当前应用
六 HttpSession概述及原理探讨
得到HttpSession对象:
HttpServletRequest.getSession():
根据特殊Cookie(JSESSIONID=HttpSession对象的id,由服务器生成,唯一的)的取值,
在服务器的内存中根据id查找这个HttpSession对象,找到了,取出来继续服务;
没有找到,创建一个新的HttpSession对象。
注: 该sessionid可以有session.getId();获得;
session在关闭浏览器后默认存在内存中半小时,可以自己配置
HttpServletRequest.getSession(boolean b):
如果b为true,与上面方法功能完全一致。如果为false,只查询。
例:
ServletA
HttpSession session = request.getSession();
session.setAttribute("p","ppp");
ServletB
HttpSession session = request.getSession();
String value = (String)session.getAttribute("p");
// 摧毁HttpSession对象
request.getSession().invalidate();
// 只是删除了域中的一个绑定对象
request.getSession().removeAttribute("user");
七、HttpSession案例(*****)
完成用户的一次性登录(随机验证码验证)(*****)
简单购物原理案例 (*****)
防止表单的重复提交(Base64编码+MD5加密)(*****)
java.util.UUID:通用的唯一标识符
八、客户端禁用Cookie后的会话数据保存问题 (*****)
客户端禁用Cookie对http://localhost访问的无效
解决办法:
url---->url;JSESSIONID=123:URL重写.必须对网站中的所有URL地址都重写。
HttpServletResponse.encodeURL(url):是一个智能方法。判断用户是否禁用了Cookie,
没有禁用,则不重写;禁用了就重写。
网站主页:为了更好访问本网站,请不要禁用您的Cookie。
九、HttpSession对象的状态及转换(序列化) (*****)
修改web.xml
<session-config>
<session-timeout>1</session-timeout><!--自然整数,单位是分钟-->
</session-config>
2、 javaBean中的类要实现Serializable接口