状态管理——Cookie
来源:互联网 发布:python教学 编辑:程序博客网 时间:2024/06/16 23:50
状态管理
(1)什么是状态管理
将浏览器与web服务器之间多次交互当做一个整体来看待,并且將多次交互所涉及的数据保存下来(2)Cookie
1)什么是Cookie?
服务器临时保存在浏览器端的少量的数据
2)cookie的工作原理
浏览器访问服务器时, 服务器会将少量数据以set-cookie消息头的方式发给浏览器,浏览器会将这些数据临时保存起来;当浏览器再次访问服务器时,会将之前保存的这些数据以cookie消息头的方式发送给服务器。
3)添加cookie
Cookie cook=new Cookie(String name,String value);//创建cook
//cookie.setMaxAge();
Response.addCookie(cook);//添加cookie
4)读取cookie
Cookie [] cook=request.getCookies();//注意该方法可能返回null
String name=cookie.getName();
String value=cookie.getValue();
5)编码问题
Cookie只能保存合法的ASCII字符,对于中文,需要将其转换成相应的ASCII字符的表现形式。URLEncoder.encode();//将中文设置成相应的ASCII
URLDecoder.decode();//将相应的ASCII码转换为中文
注意:添加cookie时建议最好统一编码处理
6)生存时间
Cookie.setMaxAge(int seconds)
默认浏览器会将cookie保存在内存里面。浏览器只要不关闭,cookie就一直存在,浏览器关闭,则cookie会被删除。
注意:
a.单位为秒
b.当seconds>0 浏览器会将cookie保存在硬盘上,当超过指定时间,浏览器会删除该cookie
当seconds<0 (缺省值)
当seconds=0 删除cookie
比如,要删除一个名称为“uid”的cookie:
Cookie c=new Cookie(“uid”,””);
c.setMaxAge(0);
response.addCookie(c);
7)路径问题
a.什么是cookie的路径问题?
浏览器在向服务器上的某个地址发送请求时,会比较该地址是否符合cookie路径的描述,只有符合要求的cookie才会被发送。
b.cookie默认路径
Cookie有一个默认路径,等于添加该cookie组件的路径。比如:/T-Test5/bz1/cookie1.jsp,则添加的cookie的路径就等于/T-Test5/bz1/
c.要访问的地址必须是cookie的路径或者其子路径
d.cookie.setPath(String path)
比如:cookie.setPath(“/T-Test5”)
注意:
* Cookie的path并不是设置这个Cookie在客户端的保存路径!!
* Cookie的path由服务器创建Cookie时设置
* 当浏览器访问服务器某个路径时,需要归还哪些Cookie给服务器呢?这由Cookie的path决定。
浏览器访问服务器的路径,如果包含某个Cookie的路径,那么就会归还这个Cookie。
* 例如:
aCookie.path=/day11_1/; bCookie.path=/day11_1/jsps/; cCookie.path=/day11_1/jsps/cookie/;
访问:/day11_1/index.jsp时,归还:aCookie
访问:/day11_1/jsps/a.jsp时,归还:aCookie、bCookie
访问:/day11_1/jsps/cookie/b.jsp时,归还:aCookie、bCookie、cCookie
Cookie的path默认值:当前访问路径的父路径。例如在访问/day11_1/jsps/a.jsp时,响应的cookie,那么这个cookie的默认path为/day11_1/jsps/
8)cookie的限制
a.cookie可以被禁止。
b.cookie不安全,对于敏感数据,尽量不要以cookie的方式保存。
c.cookie的大小有限制(大约4k左右)。
d.cookie的数量也有限制(大约300个)。
e.cookie只能保存字符串。
练习:获取用户上次登录时间
分析:
写一个Find_AddCookieServlet,该Servlet会先查询有没有一个名称为"uid"的cookie, 如果有,则显示该cookie的值;如果没有, 则添加之。cookie的值是当前系统时间
注:不用考虑生存时间
代码:
public class Find extends HttpServlet{ public void service(HttpServletRequest req,HttpServletResponse resp)throw ServletException,IOException{PrintWriter pw = resp.getWriter();String time = getTime();Cookie cook1=null;cook1=new Cookie("uid",time);if("/T-Test5/find.do".equals(uri)){Cookie[] cooks=req.getCookies();boolean tag=false;if(cooks!=null){for (Cookie cookie : cooks){if(cookie.getName().equals("uid")){pw.println("你上次登录的时间为:"+cookie.getValue()+"<br>");tag=true;//有,覆盖resp.addCookie(cook1);pw.println("你本次登录的时间为:"+cook1.getValue());} }if(!tag){ //无,添加resp.addCookie(cook1);pw.print("欢迎新用户");}}else{//空,添加resp.addCookie(cook1);pw.print("新用户");}}protected String getTime() {Date date=new Date();SimpleDateFormat sdf=new SimpleDateFormat("YYYY-MM-dd HH:mm:ss");String time=sdf.format(date);return time;}
(3)Cookie的用途
*服务器使用Cookie来跟踪客户端状态!
*保存购物车(购物车中的商品不能使用request保存,因为它是一个用户向服务器发送的多个请求信息)
*显示上次登录名(也是一个用户多个请求)
Cookie是不能跨浏览器的!
(4)JavaWeb中使用Cookie
*原始方式(了解):使用response发送Set-Cookie响应头
使用request获取Cookie请求头
*便捷方式(精通):
使用repsonse.addCookie()//方法向浏览器保存Cookie
使用request.getCookies()//方法获取浏览器归还的Cookie
- 状态管理——Cookie
- SERVLETJSP学习(六)—— 状态管理-cookie
- 状态管理-Cookie
- 状态管理-Cookie
- cookie状态管理
- 状态管理---cookie、session
- 状态管理--Cookie
- 状态管理-cookie
- 状态管理-cookie
- 状态管理之cookie详解
- JSP状态管理之cookie
- SERVLETJSP Unit06: 状态管理-cookie
- 会话管理——cookie
- ASP.NET状态管理之五(Cookie)
- ASP.NET状态管理之一:Cookie
- JSP中使用cookie完成状态管理
- C#状态管理(Application、Session、Cookie)
- 深入剖析web的状态管理-Cookie
- C++分治算法之剔除括号
- #420 B. Okabe and Banana Trees(Div.2)
- 数据库水平切分的实现原理解析——分库,分表,主从,集群,负载均衡器
- Unity3d 获取屏幕中心位置
- facebook stetho Android调试工具
- 状态管理——Cookie
- 娱乐向VR或许要10年磨一剑,但企业级VR市场却早已进入了爆发期
- 单选框、复选框美观的样式
- C#对数据库的添加、删除和修改
- Java虚拟机---Java内存模型
- JSP内置对象request的方法的使用
- Leetcode: 526. Beautiful Arrangement
- Java DecimalFormat的主要功能及使用方法
- 计算机CPU处理,吞吐量