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资源,然后关闭浏览器,整个 ...
随机推荐
- Buck converter uses low-side PWM IC
The most common switching-power topology is a buck converter, which efficiently transforms high volt ...
- android 水纹上涨与水滴滴下效果
这两天项目比较紧,本来打算完成以后再写博客的,今天终于实现了一个炫的功能,怀着激动的心情,趁热打铁,把项目经验记录一下,效果图如下: 对功能的几点说明: 1.圆形边框旋转 2.水纹上涨 3.水滴滴下 ...
- EntityFramework:迁移工具入门
背景 刚毕业做项目的时候,没有用“迁移”这个概念,系统发布和更新的过程让人非常痛苦,在学习 Ruby On Rails 的过程解除了“迁移”,以后的所有项目都会先确定好“迁移”的方案,本文介绍一下En ...
- ecside 列表排序问题
ecside列表首先点击某一列排序,没有问题,再点第二列的时候没有起作用.原因是第二次排序的时候还包含着第一次排序的字段.所以排序始终是第一次的排序结果. 修改ecside.js 的ECSideUti ...
- 如何安装pip、升级pip包。mac下安装包的路径
参考:https://pip.pypa.io/en/stable/installing/ 1.wget -c https://bootstrap.pypa.io/get-pip.py 2.pytho ...
- Java多线程学习(吐血超具体总结)
林炳文Evankaka原创作品. 转载请注明出处http://blog.csdn.net/evankaka 写在前面的话:此文仅仅能说是java多线程的一个入门.事实上Java里头线程全然能够写一本书 ...
- 使用Springboot Email实现邮件发送
在springboot配置文件增加emai配置(此种方式不支持QQ邮箱): spring.datasource.type=com.alibaba.druid.pool.DruidDataSource ...
- 微软URLRewriter.dll的url重写的简单使用(实现伪静态)
先添加引用URLRewriter.dll到项目下的bin目录中,下载: http://files.cnblogs.com/tianguook/URLRewriter.rar 1.在web.config ...
- javascript学习笔记------概念相关
javascript中的函数.对象 1. 在javascript中,函数是被当成一种数据类型,它可以被存储在一个变量.数组.对象中,可以被当作参数传递到另一个函数中. 函数就像是字符串和数字这样的的数 ...
- 【深夜福利】Caffe 添加自己定义 Layer 及其 ProtoBuffer 參数
在飞驰的列车上,无法入眠.外面阴雨绵绵,思绪被拉扯到天边. 翻看之前聊天,想起还欠一个读者一篇博客. 于是花了点时间整理一下之前学习 Caffe 时添加自己定义 Layer 及自己定义 ProtoBu ...