Cookie and Session
1.cookie的原理
例:有一个篮球场是我开的(我要收费)。
在我这里来打蓝球。
第一次来打球,我就为你办一张会员卡
以后来打球,直接把会员卡拿出来,就可以进去打球了……
2.我们怎么使用cookie
2.1创建coolie
EmailMainServlet.java(设置cookie)
2.2得到cookie
EmailListServlet.java(得到cookie)
EmailSingleServlet.java(得到cookie)
2.3解决中文问题
好像Cookie是不支持中文的(怎么办)
我们就需要进行编码与解码……
在WEB程序中怎么解决:
编码:
解码:
在 Tomcat7中,是不支持中文的 ……
2.4修改Cookie方式1
2.5修改cookie的第二种方式
2.6删除Cookie
很坑的就是,并没有提供删除Cookie给我们
cookie.setMaxAge(0);
2.7Cookie的生命周期(了解)
生:Cookie在创建之后放到浏览器中
死:关闭浏览器
我们可以自己去设置Cookie的存在时间
cookie.setMaxAge(int second);
例:cookie.setMaxAge(60 * 60 * 24 * 7); //一周
代码:
EmailMainServlet
EmaiListServlet
正数:代表多少秒
0:就代表删除
负数:关闭浏览器
2.8cookie的路径与域的问题
路径问题
/cookie/login 在这个路径下面保存的Cookie
/cookie/single:可以拿到路径的
/cookie2/list :这个就拿不到路径
Cookie默认只存在当前路径的位置
怎么解决:
EmailListServlet
EmailMainServlet
域的问题(了解)
就我们使用百度的时候(登录一次,在所有的地方都可以使用):
www.baidu.com
news.baidu.com
doc.baidu.com
Music.baidu.com
跨域对二级域名跨域的方式
实现代码:cookie.setDomain(".baidu.com")
2.9Cookie有什么问题
①它还是不安全(cookie存在客户端)
②操作中文太麻烦了
③Cookie依然是有限制的
Cookie大小限制在4KB之内;
* 一台服务器在一个客户端最多保存20个Cookie;
- 一个浏览器最多可以保存300个Cookie;
④Cookie不能操作对象
好处:可以设置保存很长的时间
2.10小结
1.使用Session去解决Cookie的缺点,Session和Cookie用到不同地方(以后用了在说)
4.Session
1.刚才我们已经看到了。Cookie有很多问题,那么我们又有一种解决方法,它叫做session
2.Session是一种解决方安案,但是它不是cookie的代替方案
1 .Session又是怎么来保持状态连接的
举一个例:
我开了一家旅馆,张三来住店。(把钥匙给张三),把他的东西放在他自己的房间里面,他出去玩了,玩完之后回到旅馆,需要进他自己的房间(钥匙);
理解Session:
Session是把数据保存到服务器端
Session底层依然使用Cookie
从上面我们可以看到:要使用session(也是在cookie基础上)
2创建session
HttpSession session = req.getSession();
如果有session,那么直接拿到session
如果没有session,创建一个session,再拿到这个session
HttpSession session = req.getSession(boolean value);
value:true -> 如果有直接拿,如果没有创建一个
value:false ->如果有直接拿,如果没有返回null
3怎么能session里面设置值
session.setAttribute(String key, Object obj);
session.setAttribute(“name”, name);
session.setAttribute(“user”, user);
4怎么从session里面取值
req.getSession().getAttribute(String key);
req.getSession().getAttribute(“name”)
5删除session中的值
根据一个key删除session中的一条记录
req.getSession().removeAttribute(“name”);
销毁整个Session对象
req.getSession().invalidate();
6.存取一个对象
7.session的取名
这个不做强制要求:XXX_IN_SESSION
NAME_IN_SESSION
USER_IN_SESSION
8.session的生命周期
从我们创建session开始,到关闭浏览器死亡
注意:①很多网站/系统登陆就是使用session;
②Session有一个问题:所以内容都保存服务器内存里面,服务器内存有很大负担,慎用
Session有超时时间,默认为30分钟当我们没有操作开始计算,既然有默认的,那么我们就可以自定义一个时间(秒)session.setMaxInactiveInterval(Integer interval)
一般不再程序里面设置,应该如何要设置,需要设置很多地方
直接在web.xml中设制session的过期时间(单位分钟):
如果设置为负数 , 关闭浏览器
9.禁用cookie后,怎么办
重写URL
http://localhost/session/single;jsessionid=372EC71FF0939E7C74B533B071714C5E
resp.encodeURL(“路径”) -->资源重写解决这个问题
以后工作我们可能会做上传的功能。 上传的时候很有可能我们会使用flash组件。
Flash组件有一个问题:session丢失,这个时候就需要将jsessionid手动进行传递提交/