Cookie技术
u 常用的API
创建Cookie对象
Cookie(String name, String value) ->以指定数据创建Cookie对象
设置Cookie对象
void setMaxAge(int expiry) ->设置Cookie的最大有效时间
void setPath(String uri) ->设置Cookie的有效路径
void setDomain(String pattern) ->设置Cookie的有效域
发送Cookie对象
void addCookie(Cookie cookie) ->发送Cookie对象
获取Cookie对象
Cookie[] getCookies() ->获取用户请求中的Cookie数组
获取Cookie中携带信息
int getMaxAge() ->获取Cookie的最大有效时间
String getName() ->获取Cookie的名字
String getValue() ->获取Cookie存储的值
String getDomain() ->获取Cookie的有效域
String getPath() ->获取Cookie的有效路径
读和写多个Cookie
如果给客户端输出多个Cookie对象,那么服务器会创建多个
Set-Cookie: name=jack; Expires=Wed, 16-Jan-2013 07:02:01 GMT
Set-Cookie: password=root; Expires=Wed, 16-Jan-2013 07:02:01 GMT头字段进行Cookie的发送。
多个Cookie在浏览器缓存中以一个文件的形式进行存储。
浏览器使用一个Cookie: name=jack; password=root带多个Cookie数据。
Cookie有效路径
以上的代码在第一次写回Cookie后,如果后面继续请求该网站的其他资源,那么还会继续携带Cookie对象直到Cookie过期。但是如果访问不同网站那么不带该Cookie。
cookie2.setPath("/day08/read");
Set-Cookie: password=root; Expires=Wed, 16-Jan-2013 07:25:06 GMT; Path=/day08/read
存储的时候由于两个Cookie的有效路径不同,因此存储在不同的Cookie文件中。
但是指定有效路径的Cookie文件中多了有效路径的值。
password
root
localhost/day08/read
但是如果现在需要在不同的网站中传递Cookie对象,那么如何指定有效路径。
cookie2.setPath("/"); à 指定Cookie的有效路径是tomcat的webapps目录
Cookie的跨域
假定A服务器上发布一个网站叫CMS系统,域名www.sina.com.cn
在CMS系统中可以直接编写一个写Cookie的Servlet。但是要设置该Cookie的有效域。
cookie.setDomain(“.163.com”);
假定B服务器上发布一个网站叫IT系统,域名www.163.com
编写一个获取Cookie数据的Servlet进行Cookie的数据读取。
总结:
- 可以实现自动登录。用户名和密码默认是明码的。开发者需要自定义加密。Md5 Base64
- 购物车的商品ID信息
- 存储用户上次的登录时间
使用Cookie实现显示用户的上次访问时间
public void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {
// 页面输出
response.setCharacterEncoding("utf-8");
response.setContentType("text/html;charset=utf-8");
request.setCharacterEncoding("utf-8");
// 获取字符输出流对象
PrintWriter out = response.getWriter();
// 获取Cookie数组对象
Cookie [] cookies = request.getCookies();
// 定义一个时间的字符串变量
String date = null;
// 定义一个变量存储系统当前日期
Date current_date = new Date();
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
// 判断是否是第一次登陆
if(cookies != null){
// 直接循环
for(Cookie cookie : cookies){
// 获取Cookie
if("lasttime".equals(cookie.getName())){
// 获取上次访问的时间
date = cookie.getValue();
break;
}else{
// 获取系统时间
date = format.format(current_date);
}
}
}else{
// 获取系统时间
date = format.format(current_date);
}
// 显示时间
out.println(date);
// 将这次访问的时间写入Cookie
Cookie new_cookie = new Cookie("lasttime",
format.format(new Date()));
new_cookie.setMaxAge(5*60);
new_cookie.setPath("/day08/showtime");
// 发送
response.addCookie(new_cookie);
}
如果cookie没有调用setMaxAge方法,这个cookie没被放在文件里,而是放在客户端浏览器的内存中。
Cookie细节
- 一个Cookie只能存储一种信息。
- 一个网站可以发送多个Cookie,浏览器可以同时携带多个Cookie。
- 同一个网站最多发送20个Cookie,浏览器最多存储300个Cookie,一个Cookie最多存储数据在4K以内。
- 如果创建了Cookie对象没有指定最大有效时间那么不会存储在浏览器的缓存中。
Cookie技术的更多相关文章
- php中cookie技术关于跨目录调用cookie值的问题
今天做项目发现了一个奇葩错误,以cookie技术为主,反复测试发现cookie不能跨目录调用. 我在F:wamp\www\test\下面有1.php和2.php其中1.php接受2.php中setco ...
- js操纵cookie技术
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"% ...
- Cookie技术详解
1. Cookie的特性 属性: 1> name: Cookie的名字 2> value: Cookie的值 3> path: 可选,Cookie的存储路径,默认情况下的存储路径时访 ...
- cookie技术简介
Cookie简介 众所周知,HTTP协议是一个无状态的协议.一个Web应用由很多个Web页面组成,每个页面都有唯一的URL来定义.用户在浏览器的地址栏输入页面的URL,浏览器就会向Web Server ...
- javaWeb学习总结(6)- 会话之cookie技术
什么是会话? 在日常生活中,从拨通电话到挂断电话之间的一连串的你问我答的过程就是一个会话. 会话可简单理解为:用户开一个浏览器,点击多个超链接,访问服务器多个web资源,然后关闭浏览器,整个过程称之为 ...
- 会话技术、Cookie技术与Session技术
一.会话技术 1. 存储客户端状态 会话技术是帮助服务器记住客户端状态(区分客户端)的. 2. 会话技术 从打开一个浏览器访问某个站点,到关闭这个浏览器的整个过程,称为一次会话.会话技术就是记录这 ...
- #WEB安全基础 : HTTP协议 | 0x8 HTTP的Cookie技术
说道Cookie,你喜欢吃饼干吗? 这里的Cookie不是饼干=_= HTTP不对请求和响应的通信状态进行保存,所以被称为无状态协议,为了保持状态和协议功能引入了Cookie技术 Cookie技术在请 ...
- Java第三阶段学习(十三、会话技术、Cookie技术与Session技术)
一.会话技术 1. 存储客户端状态 会话技术是帮助服务器记住客户端状态(区分客户端)的. 2. 会话技术 从打开一个浏览器访问某个站点,到关闭这个浏览器的整个过程,称为一次会话.会话技术就是记录这 ...
- java基础79 会话管理(Cookie技术、Session技术)
1.概念 会话管理:管理浏览器和服务器之间会话过程中产生的会话数据. Cookie技术:会话数据保存到浏览器客户端.[存 编号/标记(id)] Session技术:会话技术会保存到 ...
- 会话管理之Cookie技术
会话管理是web开发中比较重要的环节,这一节主要总结下会话管理中的cookie技术. 1. 何为会话 会话可简单理解为:用户开一个浏览器,点击多个超链接,访问服务器多个web资源,然后关闭浏览器,整个 ...
随机推荐
- SQL 语句实现排序问题!
SQL 查询数据时按某列排序后增加排名列,需排名的列值相等时排名相同,即如需排名列数组为:9,9,8,7,7,6 添加的排名列数组需要显示为两种: 第一种:1,1,3,4,4,6 (这种排名方 ...
- Linux下Shell命令的输出信息同时显示在屏幕和保存到日志文件中
#直接覆盖日志文件 ls -l | tee ./t.log #将输出内容附加到日志文件 ls -l | tee -a ./t.log 使用的是tee命令
- dsh安装指南
dsh批量管理linux服务器 一,安装dsh 切换到root用户,然后切换到work_home_yourname wget http://www.netfort.gr.jp/~dancer/soft ...
- java类中属性的加载顺序,以及内存分配情况介绍
看下面例子及说明: /** 假如有外部类调用了该类,代码为:new StaticTest(); 那么下面是类属性的加载顺序 */ public class StaticTest{ public int ...
- TMapTextfile v.99/1
By Hellinger Software. Class to handle text files as memory mapped files. Including efficient method ...
- visual studio 2008试用版的评估期(万能破解)
教程 http://jingyan.baidu.com/article/a3a3f811ee87268da2eb8ae7.html 参考: http://blog.chinaunix.net/uid- ...
- JavaScript中数组的各种操作方法
[监测数组] 使用instanceof操作符,进行检测 ar arr = [1,2,3]; // arr = '非非'; if(arr instanceof Array){ console.log(' ...
- golang日期时间格式format()
format()函数格式化字符串,用了语句time.now().format(“2015-11-12 12:00:00”),结果输出结果就是不能达到理想的结果,然后把golang文档中的”2006-0 ...
- Android面试题-OkHttp3源码分析
本文配套视频: okhttp内核分析配套视频一 okhttp内核分析配套视频二 okhttp内核分析配套视频三 源码分析相关面试题 Volley源码分析 注解框架实现原理 基本使用 从使用方法出发,首 ...
- llvm中如何利用分支概率和基本块频率估计
1. 背景 llvm自2.9版以后,已经集成了对分支概率和基本块频率的静态分析. 分支概率(branch probability)是指在程序的控制流图中,从控制流从一个基本块A到其任意后继基本块Si的 ...