Cookie的简介与使用
Cookie 历来指就着牛奶一起吃的点心。然而,在因特网内,“Cookie”这个字有了完全不同的意思。那么“Cookie”到底是什么呢?“Cookie”是小量信息,由网络服务器发送出来以存储在网络浏览器上,从而下次这位独一无二的访客又回到该网络服务器时,可从该浏览器读回此信息。这是很有用的,让浏览器记住这位访客的特定信息,如上次访问的位置、花费的时间或用户首选项(如样式表)。Cookie 是个存储在浏览器目录的文本文件,当浏览器运行时,存储在 RAM 中。一旦你从该网站或网络服务器退出,Cookie 也可存储在计算机的硬驱上。当访客结束其浏览器对话时,即终止的所有 Cookie。Cookie特点
Cookie内存大小受限
| 空 | IE 6.0 | IE 7.0 8.0 | Opera | Fire Fox | Safari | Chrome |
|---|---|---|---|---|---|---|
| Cookie个数 | 每个域名下20个 | 每个域名下50个 | 每个域名30个 | 每个域名50个 | 没有限制 | 每个域名53个 |
| Cookie大小 | 4095字节 | 4095字节 | 4096字节 | 4097字节 | 4097字节 | 4097字节 |
Cookie具有生命周期
Cookie可以保持登录信息到用户下次与服务器的会话,换句话说,下次访问同一网站时,用户会发现不必输入用户名和密码就已经登录了(当然,不排除用户手工删除Cookie)。而还有一些Cookie在用户退出会话的时候就被删除了,这样可以有效保护个人隐私。 Cookie在生成时就会被指定一个Expire值,这就是Cookie的生存周期,在这个周期内Cookie有效,超出周期Cookie就会被清除。有些页面将Cookie的生存周期设置为“0”或负值,这样在关闭浏览器时,就马上清除Cookie,不会记录用户信息,更加安全。Cookie满足同源策略
虽然网站images.google.com与网站www.google.com同属于Google,但是域名不一样,二者同样不能互相操作彼此的Cookie。 问题来了 举个例子: 访问玩zhidao.baidu.com 再访问wenku.baidu.com还需要重新登陆百度账号吗? 解决办法: 设置document.domain = ‘baidu.com’; 让页面属于这个基础域名下(那么此页面和任何二级域名为baidu.com的)封装自己Cookie的增删改查函数
/*
2017/02/20
cookie操作
*/function setCookie(key, value, iDay) {
var oDate = new Date();
oDate.setDate(oDate.getDate() + iDay);
document.cookie = key + '=' + value + ';expires=' + oDate;
}function removeCookie(key) {
setCookie(key, '', -1);//这里只需要把Cookie保质期退回一天便可以删除}function getCookie(key) {
var cookieArr = document.cookie.split('; '); for(var i = 0; i < cookieArr.length; i++) { var arr = cookieArr[i].split('='); if(arr[0] === key) { return arr[1];
}
} return false;
}
SpringMVC与Cookie
@CookieValue的作用
用来获取Cookie中的值
@RequestMapping("/testCookie")
public String testCookie(@CookieValue(value="name",required=false) String name,
@CookieValue(value="age",required=false) Integer age){
System.out.println(name+","+age);
return "hello";
}
通过Request操作Cookie
/**
* 读取所有cookie
* 注意二、从客户端读取Cookie时,包括maxAge在内的其他属性都是不可读的,也不会被提交。浏览器提交Cookie时只会提交name与value属性。maxAge属性只被浏览器用来判断Cookie是否过期
* @param request
* @param response
*/
@RequestMapping("/showCookies")
public void showCookies(HttpServletRequest request,HttpServletResponse response ){
Cookie[] cookies = request.getCookies();//这样便可以获取一个cookie数组
if (null==cookies) {
System.out.println("没有cookie=========");
} else {
for(Cookie cookie : cookies){
System.out.println("name:"+cookie.getName()+",value:"+ cookie.getValue());
}
}
}
/**
* 添加cookie
* @param response
* @param name
* @param value
*/
@RequestMapping("/addCookie")
public void addCookie(HttpServletResponse response,String name,String value){
Cookie cookie = new Cookie(name.trim(), value.trim());
cookie.setMaxAge(30 * 60);// 设置为30min
cookie.setPath("/");
System.out.println("已添加===============");
response.addCookie(cookie);
}
/**
* 修改cookie
* @param request
* @param response
* @param name
* @param value
* 注意一、修改、删除Cookie时,新建的Cookie除value、maxAge之外的所有属性,例如name、path、domain等,都要与原Cookie完全一样。否则,浏览器将视为两个不同的Cookie不予覆盖,导致修改、删除失败。
*/
@RequestMapping("/editCookie")
public void editCookie(HttpServletRequest request,HttpServletResponse response,String name,String value){
Cookie[] cookies = request.getCookies();
if (null==cookies) {
System.out.println("没有cookie==============");
} else {
for(Cookie cookie : cookies){
if(cookie.getName().equals(name)){
System.out.println("原值为:"+cookie.getValue());
cookie.setValue(value);
cookie.setPath("/");
cookie.setMaxAge(30 * 60);// 设置为30min
System.out.println("被修改的cookie名字为:"+cookie.getName()+",新值为:"+cookie.getValue());
response.addCookie(cookie);
break;
}
}
}
}
/**
* 删除cookie
* @param request
* @param response
* @param name
*/
@RequestMapping("/delCookie")
public void delCookie(HttpServletRequest request,HttpServletResponse response,String name){
Cookie[] cookies = request.getCookies();
if (null==cookies) {
System.out.println("没有cookie==============");
} else {
for(Cookie cookie : cookies){
if(cookie.getName().equals(name)){
cookie.setValue(null);
cookie.setMaxAge(0);// 立即销毁cookie
cookie.setPath("/");
System.out.println("被删除的cookie名字为:"+cookie.getName());
response.addCookie(cookie);
break;
}
}
}
}
查看原文:http://www.coder306.cn/?p=176
Cookie的简介与使用的更多相关文章
- cookie技术简介
Cookie简介 众所周知,HTTP协议是一个无状态的协议.一个Web应用由很多个Web页面组成,每个页面都有唯一的URL来定义.用户在浏览器的地址栏输入页面的URL,浏览器就会向Web Server ...
- session和cookie的简介
Session(时域)在计算机中,尤其是在网络应用中,称为“会话控制”.Session 对象存储特定用户会话所需的属性及配置信息.这样,当用户在应用程序的 Web 页之间跳转时,存储在 Session ...
- [Go] Cookie 使用简介
Golang 的 Cookie web 开发免不了要和 cookie 打交道.Go 的 http 库也提供了 cookie 的相关操作. type Cookie struct { Name strin ...
- Cookie用法简介
java操作Cookie---javax.servlet.http.Cookie 1.增加一个Cookie Cookie cookie = new Cookie("username" ...
- IT兄弟连 JavaWeb教程 Servlet会话跟踪 Cookie技术简介
Cookie的英文原意是“点心”,它是在客户端访问Web服务器时,服务器在客户端硬盘上存放的信息,好像是服务器送给客户的“点心”.服务器可以根据Cookie来跟踪客户状态,这对于需要区别客户的场合(如 ...
- iOS之Cookie
iOS之Cookie使用 简介 概念:Cookie中文名称叫做"小型文本文件",指某些网站为了辨别用户身份而存储在用户本地终端上的数据(通常经过加 密). Web服务器可以用过Se ...
- cookie和session的那些事
对于经常网购的朋友来说,经常会遇到一种情况: 打开淘宝或京东商城的首页,输入个人账号和密码进行登陆,然后进行购物,支付等操作都不需要用户再次输入用户名和密码 但是如果用户换一个浏览器或者等几个小时后再 ...
- Cookie 与 Session 的区别
Cookie与Session的区别 cookie的简介 cookie是Web服务器保存在客户端的一系列文本信息 cookie的作用 对特定对象的追踪 统计网页浏览次数 简化登录 安全性能:容易信息泄露 ...
- koa 基础(十四)cookie 的基本使用
1.app.js /** * cookie的简介: * 1.cookie保存在浏览器客户端 * 2.可以让我们用同一个浏览器访问同一个域名的时候共享数据 * * cookie的作用: * 1.保存用户 ...
随机推荐
- Linux部分场景非常有用的命令集1_chattr&ldd&xargs&screen&ssh&磁盘&du
这里不做详细说明或截图,仅作为记录和简单说明.注:可能只针对某一命令部分功能,不包含整个功能,若要查看全部请自行查阅文档或help 1.chattr 当某一文件或目录,不想被无意修改或删除(即使roo ...
- [JavaWeb基础] 007.Struts2的配置和简单使用
1.框架简介 采用Struts能开发出基于MVC(Model-View-Controller)设计模式的应用构架,用于快速开发Java Web应用.Struts实现的重点在C(Controller), ...
- Java的四种权限修饰符
private:仅对本类可见 缺省(不需修饰符):对本包可见 protected:对本包及所有子类可见 public:对所有类可见 修饰符: * 权限修饰符:private,默认的,protected ...
- 15 . PythonWeb框架本质
PythonWeb框架的本质 简单描述就是:浏览器通过你输入的网址给你的socket服务端发送请求,服务端接受到请求给其回复一个对应的html页面,这就是web项目.所有的Web应用本质上就是一个so ...
- HotRing: A Hotspot-Aware In-Memory Key-Value Store(FAST ’20)
本文主要解决的是基于内存的K-V存储引擎在实际应用中出现的热点问题,设计了一个热点可感知的KV存储引擎,极大的提升了KV存储引擎对于热点数据访问的承载能力. Introduction 热点问题,可 ...
- OI 做题的常见错误
会引起 Compile Error 的错误 由于这类错误过于简单,相信是个正常人都会修,故略写. int main() 写为 int mian() . 写完 struct 或 class 忘记写分号. ...
- PHP AES加解密(兼容php5,php7)
最近在工作中负责对接API,对方要求对业务数据进行AES 算法(256,ECB,补码方式:PKCS5Padding)加密. 加密算法要求如下: 算法AES/ECB/PKCS5Padding 密钥长度2 ...
- 通过link的preload进行内容预加载
Preload 作为一个新的web标准,旨在提高性能和为web开发人员提供更细粒度的加载控制.Preload使开发者能够自定义资源的加载逻辑,且无需忍受基于脚本的资源加载器带来的性能损失. <l ...
- DDD之3实体和值对象
图中是一个别墅的模型,代表实体,可以真实的看得到.那么在DDD设计方法论中,实体和值对象是什么呢? 背景 实体和值对象是领域模型中的领域对象,是组成领域模型的基础单元,一起实现实体最基本的核心领域逻辑 ...
- Java实现 LeetCode 230 二叉搜索树中第K小的元素
230. 二叉搜索树中第K小的元素 给定一个二叉搜索树,编写一个函数 kthSmallest 来查找其中第 k 个最小的元素. 说明: 你可以假设 k 总是有效的,1 ≤ k ≤ 二叉搜索树元素个数. ...