javaweb学习笔记系列之cookie简单认识
来源:互联网 发布:淘宝网店编辑岗位要求 编辑:程序博客网 时间:2024/05/16 08:41
1.会话
1、什么是会话?
打开浏览器,点击多次链接(发出多次请求和收到多次的响应),关闭浏览器,这个过程就是一次会话。
好比打电话,当对方接通之后,进行通话,当通话完毕之后挂掉了电话这就是一次会话。
2、解决的问题是什么?
共享多次请求中产生的数据。比如购物车。
假如购买了一件产品,这就是一次请求,但是你需要去付款,这也一次请求,是两个不同的请求,那么去付款的时候,所买的产品就不存在。那么请求转发将数据带过去可以的吗?这显然不是很方便。这时候就需要会话技术。
2.客户端技术:Cookie
2.1HTTP协议的消息头
请求消息头:Cookie 客户端向服务器端传递信息
响应消息头:Set-Cookie 服务器端向客户端传递信息
2.2cookie一些基本信息
Cookie详解:
l 属性:
name:Cookie的名称,必要的属性
value:Cookie的取值(不能为中文),必要的属性
-------------------以下为可选属性
path:Cookie的路径
默认值就是写cookie的那个资源的访问路径
比如:http://localhost:8080/day09_00_cookie/servlet/CookieDemo1 path就是/day09_00_cookie/servlet/
注意:
如果一个存在浏览器缓存中的cookie的路径是/day09/servlet/
当访问http://localhost:8080/day09/CookiePathDemo1时,浏览器根本不带Cookie给服务器。浏览器比对的是cookie的路径和当前访问的资源的路径。
浏览器满足一下条件就会带cookie给服务器:
当前访问的地址的路径.startWith(已存cookie的路径)。
即:如果一个Cookie的路径设置为了当前应用,说明访问该网站的任何资源时浏览器都带该cookie给服务器。(开发中经常做的)
maxAge:Cookie的最大生存时间。默认是在浏览器的内存中。
domain:Cookie的域名(网站)。默认就是写cookie的那个资源所属的网站。
http://localhost:8080/day09_00_cookie/servlet/CookieDemo1域名就是localhost
version:版本号
comment:注释
u 把Cookie写给客户端:
HttpServletResponse.addCookie(Cookie c):实际上就是向客户端发送了一个响应消息头。
注意:客户端只能保存一个网站最多20个Cookie数据,总共最多300个。每个Cookie的大小不能超过4kb。
l 服务器端获取客户端带来的Cookie:
Cookie [] HttpServletRequest.getCookies();
注意:domain+path+name唯一确定一个Cookie。
2.3代码
import java.io.IOException;import java.io.PrintWriter;import java.text.SimpleDateFormat;import java.util.Date;import javax.servlet.ServletException;import javax.servlet.http.Cookie;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;//演示cookie的基本使用public class CookieDemo1 extends HttpServlet {public void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {response.setContentType("text/html;charset=UTF-8");//设置响应编码PrintWriter out = response.getWriter();//获取输出流,用于向浏览器输出信息out.write("您上次访问的时间是:");//获取指定名称的cookie:lastAccessTime = 毫秒值Cookie[] cs = request.getCookies();//有可能是第一次登陆,所以cookie不存在,需要判断是否为空for(int i = 0;cs != null && i< cs.length; i++){//判断cookie是否存在if("lastAccessTime".equals(cs[i].getName())){long time = Long.parseLong(cs[i].getValue());//out.write(new Date(time).toLocaleString());//转化为本地时间SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");//转化为指定格式的时间out.write(sdf.format(new Date()));}}//把当前的时间写回去Cookie c = new Cookie("lastAccessTime", System.currentTimeMillis()+"");//实例化Cookie对象,传入cooke名称和cookie的值c.setMaxAge(Integer.MAX_VALUE);// 设置cookie的生命周期 单位是秒response.addCookie(c);//将cookie写到本地}public void doPost(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {doGet(request,response);}}
抓取的截图:
2.4清除cookie
import java.io.IOException;import java.io.PrintWriter;import javax.servlet.ServletException;import javax.servlet.http.Cookie;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;//清除指定的cookiepublic class ClearTimeServlet extends HttpServlet {public void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {//如何唯一定位要删除的cookie:domain+path+nameCookie c = new Cookie("lastAccessTime", "");c.setMaxAge(0);response.addCookie(c);}public void doPost(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {doGet(request,response);}}
2.5cookie的path问题
import java.io.IOException;import java.io.PrintWriter;import javax.servlet.ServletException;import javax.servlet.http.Cookie;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;//演示Cookie的pathpublic class CookiePathDemo1 extends HttpServlet {public void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {//path:/day09/servlet/Cookie c = new Cookie("demoCookie", "aaa");c.setPath(request.getContextPath());// 把路径改为 /day09c.setMaxAge(Integer.MAX_VALUE);//c.setDomain("itheima.com");//写了白写response.addCookie(c);}public void doPost(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {doGet(request, response);}}
import java.io.IOException;import java.io.PrintWriter;import javax.servlet.ServletException;import javax.servlet.http.Cookie;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;public class CookiePathDemo2 extends HttpServlet {public void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {Cookie cs[] = request.getCookies();for(int i=0;cs!=null&&i<cs.length;i++){if("demoCookie".equals(cs[i].getName())){//找到了response.getWriter().write(cs[i].getValue());}}}public void doPost(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {doGet(request, response);}}
- javaweb学习笔记系列之cookie简单认识
- JavaWeb之Cookie的简单学习
- javaWeb笔记之Cookie
- 十二.javaweb之Cookie学习
- JavaWeb系列之八(Cookie&Session)
- Javaweb学习笔记5—Cookie&Session
- JavaWeb学习篇之----Session&&Cookie
- JavaWeb学习篇之----Session&&Cookie
- Javaweb学习之Session和Cookie
- JavaWeb学习篇之----Session&&Cookie
- JavaWeb学习篇之----Session&&Cookie
- 学习笔记之cookie
- iOS开发学习之Cookie认识
- (javaweb读书笔记系列之四)cookie和session
- JavaWeb学习笔记之MVC
- JavaWeb学习笔记之servlet
- 学习笔记之 JAVAWEB过滤器
- JavaWeb学习笔记之数据库连接
- Cocos2d-x 自定义血条及其美化----之游戏开发《赵云要格斗》(4)cocos2dx 3.3移植版
- 新导入工程报Unable to resolve target 'android-18'和R cannot be resolved
- BZOJ 1001狼抓兔子(最大流)
- 解决JS循环闭包导致索引始终为最后值的问题
- 网络编程小知识——TIME_WAIT理解
- javaweb学习笔记系列之cookie简单认识
- 安卓中使用百度地图(一)
- Java加密技术——数字证书
- OpenCV Using Python——RGB颜色空间中的肤色检测
- golang语言中struct的初始化方式
- BZOJ 1010 玩具装箱 (斜率优化DP)
- 我独爱WindowsPhone
- 浏览器的工作原理:新式网络浏览器幕后揭秘
- .net扫盲-网页对话框应用