将浏览器与web服务器之间的多次交互当作一个整体来处理,并且将多次交互 所涉及的数据保存下来。
注:
状态:多次交互所涉及的数据。比如购买的商品信息。
管理:将这些数据保存下来。
方式一:将状态保存在浏览器端(Cookie)。
方式二:将状态保存在服务器端(Session)。
服务器临时存放在浏览器端的少量数据,用于保存用户的状态。
当浏览器第一次访问服务器时,服务器会将少量数据以set-cookie消息头
的形式发送给浏览器,浏览器会将这些数据临时保存下来。
当浏览器再次访问服务器时,会将这些数据以cookie消息头的形式发送给
服务器。
Cookie c = new Cookie(String name,String value);
response.addCookie(c);
注:
name:Cookie名,每一个cookie都必须有一个名字,要求唯一。
value:Cookie值。
Cookie[] request.getCookies();
注:
该方法有可能返回null。
String cookie.getName();
String cookie.getValue();
Cookie.setMaxAge(int seconds);
单位是秒。
值可以>0: 浏览器会将cookie保存在硬盘上(一般是一个小的文件),
超过指定时间,cookie会被删除(失效)。
值可以<0: (缺省值),即浏览器会将cookie保存在内存里面,浏览器如果
关闭,则cookie会被删除。
值可以=0: 删除cookie。
比如,要删除一个名称为"username"的cookie
Cookie c = new Cookie("username","");
c.setMaxAge(0);
response.addCookie(c);
a.什么是Cookie的编码问题?
Cookie里面只能存放合法的ascii字符,对于非ascii字符,比如中文,
要将中文转换成合法的ascii字符的形式。
b.如何处理?
String URLEncoder.encode(String str,String charset);
String URLDecoder.decode(String str,String charset);
c.建议: 添加cookie时,最好统一编码处理。
a.什么是Cookie的路径问题?
浏览器向服务器发请求时,会查看请求地址是否符合Cookie的路径要求,
只有符合条件的cookie才会被发送。
b.Cookie的默认路径
等于添加該Cookie的web组件的路径。
比如说 "/servlet09/biz01/addCookie.jsp"添加了一个cookie,
则该cookie的默认路径就是"/servlet09/biz01"。
c.匹配规则
请求地址要么等于cookie的路径,要么是其子路径。只有符合
这个条件的cookie才会被发送。
比如说,cookie路径是"/servlet09/biz01",
请求地址是 "/servlet09/findCookie1.jsp", no!
请求地址是 "/servlet09/biz01/findCookie2.jsp", yes!
请求地址是"/servlet09/biz01/sub/findCookie3.jsp", yes!
d.修改Cookie的路径
cookie.setPath(String path);
a.Cookie可以被用户禁止。
注:可以提示用户不要将cookie禁止。
可以通过navigator.cookieEnabled来获得浏览器是否禁止了cookie。
b.Cookie只能存放少量的数据。
大约4k左右。
c.Cookie数量也有限制。
几百个左右。
d.Cookie只能存放字符串。
e.Cookie不安全。
敏感数据尽量不要直接以cookie的方式保存。
如果一定要用,要加密处理。
服务器为了保存用户状态而创建的一个特殊的对象。
当浏览器第一次访问服务器时,服务器创建一个session对象(该
对象有一个唯一的id,一般称之为sessionId),服务器会将sessionId
以cookie的方式发送给浏览器。
当浏览器再次访问服务器时,会将sessionId发送过来,服务器依据
sessionId就可以找到对应的session对象。
方式一 HttpSession s = request.getSession(boolean flag);
注:
HttpSession是一个接口。
当flag为true时:
先查看请求当中是否有sessionId,如果没有,
则创建一个session对象。如果有,则依据sessionId
查找对应的session对象,如果找到了,则返回该
对象,如果找不到,创建一个新的session对象。
当flag为false时:
先查找请求当中是否有sessionId,如果没有,
返回null。如果有,则依据sessionId查找对应的session
对象,如果找到了,则返回该对象,如果找不到,返回
null。
方式二 HttpSession s = request.getSession();
等价于 request.getSession(true);
绑订数据:
session.setAttribute(String name,Object obj);
依据绑订名获得绑订值:
Object session.getAttribute(String name);
注:如果绑订名对应的值不存在,返回null。
解除绑订:
session.removeAttribute(String name);
写一个Servlet,添加一个名称为"company"的cookie,值是"tarena"。