1.两者区别:
Cookie是客户端技术
HttpSession是服务器端技术
2.Cookies是什么?
一个小信息,由服务器写给浏览器的;
由浏览器来保存;
客户端保存的Cookie信息,可以再次带给服务器
3.Cookies的属性:
name:必须的
value:必须的
comment:可选的。注释
path:可选的。
写Cookie的程序的访问路径是:http://localhost:8080/day07/servlet/CookieDemo1
其中:localhost就是域名;/day07/servlet就是当前Cookie的path
如果一个Cookie的路径设置成了/day07,意味着当前应用下的所有Cookies资源浏览器都会带着它给服务器。
所以获取和添加Path的保持一致,如:c.setPath(request.getContextPath());
domain:可选的。该Cookie所属的网站域名。(itcast.cn)默认值。
maximum age:可选的。
不设置就是会话过程(存在浏览器的内存中),单位是秒。
如果是0,说明要删除。
如果是Integer.MAX_VALUE,说明永久保存。
version:可选的。版本号
4.添加&获取Cookies
实例化Cookies:Cookie c = new Cookie(名字,值);
向客户端写Cookie:c.addCookie();
得到客户端传来的Cookie:c.getCookies();
删除cookie:c.setMaxAge(0);
记住cookie:c.setMaxAge(Integer.MAX_VALUE);
5.如何区分Cookies?
不能通过名称,默认用domain+path+name来区分的。
最好固定用setPath(request.getContextPath());
6.URL地址写法:
最好使用绝对路径!"/"就代表着当前应用。
*地址给服务器用的,不用加。
*给客户端用的,要加,绝对路径要加上应用名称。
如:
<link href=path/> 要加/day07
<script src=path/> 要加/day07
<img src=path/> 要加/day07
<a href=path/> 要加/day07
RequestDispatcher.include(path) 不要加,"/"就代表着当前应用
RequestDispatcher.forward(path) 不要加,"/"就代表着当前应用
HttpServletResponse.sendRedirect(path) 要加/day07
ServletContext.getRealPath(path) 不要加,"/"就代表着当前应用
7.得到Session
Request.getSession():
*根据特殊Cookie(JSESSIONID=HttpSession对象的id,由服务器生成,唯一的)的取值,在服务器的内存中根据id查找这个HttpSession对象,找到了,取出来继续服务;
*没有找到,创建一个新的HttpSession对象。
Request.getSession(boolean b):
如果b为true,与上面方法功能完全一致;
如果为false,只查询。
8.Session的作用:
1.贯穿用户登录到注销/关闭浏览器的整个过程;
2.识别用户并保持用户信息,或者说监控用户是否登录或者已经注销;
3.防止表单重复提交;(利用session保存一个随机的令牌,用一次就销毁,看你怎么重复提交表单)
4.实现一次性验证码。(把验证码code放进session中,防止抓包对其破解)
9.禁用Cookie后的会话数据保存问题
1.客户端禁用Cookie对http://localhost访问的无效。
2.把URL重写,必须对网站中的所有URL地址都重写。
效果:url—->url;JSESSIONID=123459789
HttpServletResponse.encodeURL(url):是一个智能方法。判断用户是否禁用了Cookie,没有禁用,则不重写;禁用了就重写。
实际上就是把JSESIONID加在url后面,在浏览器地址栏可以看到。
3.网站主页:为了更好访问本网站,请不要禁用您的Cookie。
10.HttpSession对象的状态及转换(序列化)
1.更改内存中HttpSession对象的超时时间。
修改web.xml
<session-config>
<session-timeout>1</session-timeout><!--自然整数,单位是分钟-->
</session-config>
2.实现session持久化。(必须在实现session的servlet 中实现接口implements serializable,不然报错啊)