Cookie在前端开发中的知识点。
2014-04-02 13:42
155 查看
Cookie的基本概念和定义:
每一个cookie在本地存储包含的内容如下:
key 名称
value 内容
expires 有效期,如果有效期超过则浏览器不会传送到服务器去,如果不指定则为0表示关闭浏览器时就会删除cookie,注意这里的时间是GMT时间格式
path 路径,指定那个路径下面的请求上传时才把这个cookie带到服务器,路径指定会对其子路径也有效.默认是根目录
domain 域名或主机名,指定访问哪些域名或主机名时才上传这个cookie,默认不指定时只有当前主机才上传cookie
例子:
username=oybq;path=/login;domain=.baidu.com
上面的意思是说只要是访问baidu.com域名并且是/login下的页面时才上传这个cookie.
username=oybq;path=/;domain=www.baidu.com;expires=2015/1/1
表示只有访问www.baidu.com的所有路径并且在2015年1/1日以前才会上传
cookie。
cookie在HTTP请求中的传输格式:
当某个cookie满足请求的路径,超时或者主机时会在http请求头中以如下形式上传到服务器
Cookie:key=value;key=value;key=value
注意这里的value是要escape函数转码
cookie在HTTP的响应头中的传输格式:
服务器有cookie下发时以如下格式下发
Set-Cookie:key=value;expires=可选的GMT格式表示的时间,如果是0或者不指定则表示不保存cookie;path=可选的路径;domain=可选的主机名或者域名域名以.开头,如果不指定则为当前主机
Set-Cookie:….
Set-Cookie….
如果是多个cookie则要返回多个Set-Cookie
比如:
键 值
Set-Cookie BAIDUID=DF; expires=Thu, 31-Dec-37 23:55:55 GMT; path=/; domain=.baidu.com
Set-Cookie BDSVRTM=0; path=/
Set-Cookie H_PS_PSSID=4678; path=/; domain=.baidu.com
浏览器要根据响应头中的cookie来决定哪些需要存储,以及存储的内容,响应头中的cookie是经过转码的,因此客户端收到后要注意转码
IOSCookie类:
Cookie可以分为两类,会话Cookie和持久Cookie,会话Cookie是临时Cookie,当前会话结束(浏览器退出)时Cookie会被删除。持久Cookie会存储在用户的硬盘上,浏览器退出,然后重新启动后Cookie仍然存在。会话Cookie和持久Cookie的区别在于过期时间,如果设置了Discard参数(Cookie 版本1)或者没有设置Expires(Cookie版本0)或Max-Age(Cookie版本1)设置过期时间,则此Cookie为会话Cookie
Cookie有两个版本,一个是版本0(Netscape Cookies)和版本1(RFC 2965),目前大多数服务器使用的Cookie 0。
NSHTTPCookie 类描述每个具体的cookie,
1.cookie的建立,
- (id)initWithProperties:(NSDictionary *)properties;
+ (id)cookieWithProperties:(NSDictionary *)properties;
这个字典是描述cookie的各种属性的,其中的key 有如下:
FOUNDATION_EXPORT NSString * const NSHTTPCookieName;
FOUNDATION_EXPORT NSString * const NSHTTPCookieValue;
//和Domain二选1
FOUNDATION_EXPORT NSString * const NSHTTPCookieOriginURL;
//和OriginURL二选1
FOUNDATION_EXPORT NSString * const NSHTTPCookieDomain;
//必选,默认是"/"
FOUNDATION_EXPORT NSString * const NSHTTPCookiePath;
//String型,0或者1,1为会话cookie,0为永久cookie,默认为0
FOUNDATION_EXPORT NSString * const NSHTTPCookieVersion;
//String型TRUE FALSE
FOUNDATION_EXPORT NSString * const NSHTTPCookieSecure;
//日期型NSDate,只在为0是需要设置
FOUNDATION_EXPORT NSString * const NSHTTPCookieExpires;
//可选,表示在会话内的有效时间,单位为秒。
FOUNDATION_EXPORT NSString * const NSHTTPCookieMaximumAge;
//从响应头字典里面得到cookie数组,这个是在HTTP响应头里面,响应头可以包括其他字典信息,但只会解析Set-Cookie部分。
+ (NSArray *)cookiesWithResponseHeaderFields:(NSDictionary *)headerFields forURL:(NSURL *)URL;
//根据cookie数组得到http请求头的cookie部分的值,得到字典中只有一个kv对
+ (NSDictionary *)requestHeaderFieldsWithCookies:(NSArray *)cookies;
//其他方法是都是得到cookie的属性的,有一个特殊属性就是是否会话有效,如果是则表示不保存关闭浏览器就没有。
NSHTTPCookieStorage 读取和保存应用内的cookie信息。
+ (NSHTTPCookieStorage *)sharedHTTPCookieStorage;
- (NSArray *)cookies;
- (void)setCookie:(NSHTTPCookie *)cookie;
- (void)deleteCookie:(NSHTTPCookie *)cookie;
- (NSArray *)cookiesForURL:(NSURL *)URL; //根据地址得到数组,这个函数的返回用于requestHeaderFieldsWithCookies的调用
//这个主要是在NSURLRequest中有一个设置主文档URL的地方,表示对于响应的URL中的跟主文档URL相同域的响应头中的cookie进行保存,
这个函数一般不用自己调用。
- (void)setCookies:(NSArray *)cookies forURL:(NSURL *)URL mainDocumentURL:(NSURL *)mainDocumentURL;
//设置获取接收策略
- (void)setCookieAcceptPolicy:(NSHTTPCookieAcceptPolicy)cookieAcceptPolicy;
NSHTTPCookieAcceptPolicyAlways:接收所有cookie,默认策略.
NSHTTPCookieAcceptPolicyNever: 拒绝所有cookie
NSHTTPCookieAcceptPolicyOnlyFromMainDocumentDomain:只接收main document domain中的cookie.
NSHTTPCookieManagerCookiesChangedNotification
当NSHTTPCookieStorage实例中的cookies变化时发出此通知。接收到通知是的object是NSHTTPCookieStorage对象。,实际测试的结果是只要设置就会激发。
只要通过NSURLRequest来请求网络时系统都会根据设置来决定是否自动带上cookie信息,这个可以通过设置则
- (void)setHTTPShouldHandleCookies:(BOOL)should;
来决定请求时要不要带上cookie信息,默认是YES表示请求时会默认带上cookie信息。
JavaScript Cookie的使用:
设置cookie的值
document.cookie="key=value;key=value;path=路径;domain=主机;expires=GMT时间"
如果value中有特殊值需要调用escape()函数来转码。,这个函数可以设置多个key=value而后面跟可选的其他参数,
//设置一个30天有效的cookie
var exp = new Date(); //new Date("December 31, 9998");
exp.setTime(exp.getTime() + 30*24*60*60*1000);
document.cookie="mytest=mytest;domain=.baidu.com;expires="+exp.toGMTString();
对调用document.cookie=时是以key,path,domain作为一个cookie的唯一标识的,如果设置时这些值都一样则重新设置某个cookie的值,如果要删除某个cookie值,则只需要把这个cookie的expires设置为一个过去的时间就可以了。
//获取当前时间
var date=new Date();
//将date设置为过去的时间
date.setTime(date.getTime()-10000);
//将userId这个cookie删除
document.cookie="userId=828; expire="+date.toGMTString();
服务端也是可以响应一个值为空并且时间为0值来删除cookie
获取cookie值就通过document.cookie,这个函数会得到本主机支持的所有cookie,只会返回key=value;key=value这种值。
每一个cookie在本地存储包含的内容如下:
key 名称
value 内容
expires 有效期,如果有效期超过则浏览器不会传送到服务器去,如果不指定则为0表示关闭浏览器时就会删除cookie,注意这里的时间是GMT时间格式
path 路径,指定那个路径下面的请求上传时才把这个cookie带到服务器,路径指定会对其子路径也有效.默认是根目录
domain 域名或主机名,指定访问哪些域名或主机名时才上传这个cookie,默认不指定时只有当前主机才上传cookie
例子:
username=oybq;path=/login;domain=.baidu.com
上面的意思是说只要是访问baidu.com域名并且是/login下的页面时才上传这个cookie.
username=oybq;path=/;domain=www.baidu.com;expires=2015/1/1
表示只有访问www.baidu.com的所有路径并且在2015年1/1日以前才会上传
cookie。
cookie在HTTP请求中的传输格式:
当某个cookie满足请求的路径,超时或者主机时会在http请求头中以如下形式上传到服务器
Cookie:key=value;key=value;key=value
注意这里的value是要escape函数转码
cookie在HTTP的响应头中的传输格式:
服务器有cookie下发时以如下格式下发
Set-Cookie:key=value;expires=可选的GMT格式表示的时间,如果是0或者不指定则表示不保存cookie;path=可选的路径;domain=可选的主机名或者域名域名以.开头,如果不指定则为当前主机
Set-Cookie:….
Set-Cookie….
如果是多个cookie则要返回多个Set-Cookie
比如:
键 值
Set-Cookie BAIDUID=DF; expires=Thu, 31-Dec-37 23:55:55 GMT; path=/; domain=.baidu.com
Set-Cookie BDSVRTM=0; path=/
Set-Cookie H_PS_PSSID=4678; path=/; domain=.baidu.com
浏览器要根据响应头中的cookie来决定哪些需要存储,以及存储的内容,响应头中的cookie是经过转码的,因此客户端收到后要注意转码
IOSCookie类:
Cookie可以分为两类,会话Cookie和持久Cookie,会话Cookie是临时Cookie,当前会话结束(浏览器退出)时Cookie会被删除。持久Cookie会存储在用户的硬盘上,浏览器退出,然后重新启动后Cookie仍然存在。会话Cookie和持久Cookie的区别在于过期时间,如果设置了Discard参数(Cookie 版本1)或者没有设置Expires(Cookie版本0)或Max-Age(Cookie版本1)设置过期时间,则此Cookie为会话Cookie
Cookie有两个版本,一个是版本0(Netscape Cookies)和版本1(RFC 2965),目前大多数服务器使用的Cookie 0。
NSHTTPCookie 类描述每个具体的cookie,
1.cookie的建立,
- (id)initWithProperties:(NSDictionary *)properties;
+ (id)cookieWithProperties:(NSDictionary *)properties;
这个字典是描述cookie的各种属性的,其中的key 有如下:
FOUNDATION_EXPORT NSString * const NSHTTPCookieName;
FOUNDATION_EXPORT NSString * const NSHTTPCookieValue;
//和Domain二选1
FOUNDATION_EXPORT NSString * const NSHTTPCookieOriginURL;
//和OriginURL二选1
FOUNDATION_EXPORT NSString * const NSHTTPCookieDomain;
//必选,默认是"/"
FOUNDATION_EXPORT NSString * const NSHTTPCookiePath;
//String型,0或者1,1为会话cookie,0为永久cookie,默认为0
FOUNDATION_EXPORT NSString * const NSHTTPCookieVersion;
//String型TRUE FALSE
FOUNDATION_EXPORT NSString * const NSHTTPCookieSecure;
//日期型NSDate,只在为0是需要设置
FOUNDATION_EXPORT NSString * const NSHTTPCookieExpires;
//可选,表示在会话内的有效时间,单位为秒。
FOUNDATION_EXPORT NSString * const NSHTTPCookieMaximumAge;
//从响应头字典里面得到cookie数组,这个是在HTTP响应头里面,响应头可以包括其他字典信息,但只会解析Set-Cookie部分。
+ (NSArray *)cookiesWithResponseHeaderFields:(NSDictionary *)headerFields forURL:(NSURL *)URL;
//根据cookie数组得到http请求头的cookie部分的值,得到字典中只有一个kv对
+ (NSDictionary *)requestHeaderFieldsWithCookies:(NSArray *)cookies;
//其他方法是都是得到cookie的属性的,有一个特殊属性就是是否会话有效,如果是则表示不保存关闭浏览器就没有。
NSHTTPCookieStorage 读取和保存应用内的cookie信息。
+ (NSHTTPCookieStorage *)sharedHTTPCookieStorage;
- (NSArray *)cookies;
- (void)setCookie:(NSHTTPCookie *)cookie;
- (void)deleteCookie:(NSHTTPCookie *)cookie;
- (NSArray *)cookiesForURL:(NSURL *)URL; //根据地址得到数组,这个函数的返回用于requestHeaderFieldsWithCookies的调用
//这个主要是在NSURLRequest中有一个设置主文档URL的地方,表示对于响应的URL中的跟主文档URL相同域的响应头中的cookie进行保存,
这个函数一般不用自己调用。
- (void)setCookies:(NSArray *)cookies forURL:(NSURL *)URL mainDocumentURL:(NSURL *)mainDocumentURL;
//设置获取接收策略
- (void)setCookieAcceptPolicy:(NSHTTPCookieAcceptPolicy)cookieAcceptPolicy;
NSHTTPCookieAcceptPolicyAlways:接收所有cookie,默认策略.
NSHTTPCookieAcceptPolicyNever: 拒绝所有cookie
NSHTTPCookieAcceptPolicyOnlyFromMainDocumentDomain:只接收main document domain中的cookie.
NSHTTPCookieManagerCookiesChangedNotification
当NSHTTPCookieStorage实例中的cookies变化时发出此通知。接收到通知是的object是NSHTTPCookieStorage对象。,实际测试的结果是只要设置就会激发。
只要通过NSURLRequest来请求网络时系统都会根据设置来决定是否自动带上cookie信息,这个可以通过设置则
- (void)setHTTPShouldHandleCookies:(BOOL)should;
来决定请求时要不要带上cookie信息,默认是YES表示请求时会默认带上cookie信息。
JavaScript Cookie的使用:
设置cookie的值
document.cookie="key=value;key=value;path=路径;domain=主机;expires=GMT时间"
如果value中有特殊值需要调用escape()函数来转码。,这个函数可以设置多个key=value而后面跟可选的其他参数,
//设置一个30天有效的cookie
var exp = new Date(); //new Date("December 31, 9998");
exp.setTime(exp.getTime() + 30*24*60*60*1000);
document.cookie="mytest=mytest;domain=.baidu.com;expires="+exp.toGMTString();
对调用document.cookie=时是以key,path,domain作为一个cookie的唯一标识的,如果设置时这些值都一样则重新设置某个cookie的值,如果要删除某个cookie值,则只需要把这个cookie的expires设置为一个过去的时间就可以了。
//获取当前时间
var date=new Date();
//将date设置为过去的时间
date.setTime(date.getTime()-10000);
//将userId这个cookie删除
document.cookie="userId=828; expire="+date.toGMTString();
服务端也是可以响应一个值为空并且时间为0值来删除cookie
获取cookie值就通过document.cookie,这个函数会得到本主机支持的所有cookie,只会返回key=value;key=value这种值。
相关文章推荐
- 前端开发涉及的知识点
- web前端开发阶段性知识点
- web前端开发培训之前端开发必会的二十五个知识点
- 前端开发中Cookie那些事儿
- 【前端开发】前端开发必会的二十五个知识点
- MUI框架前端开发知识点
- 【前端知识点】模块化开发介绍
- 前端开发面试知识点大纲
- web前端-关于javascript开发的重要知识点
- Web前端开发知识点1
- 前端开发中通过js设置cookie的一组方法
- 前端开发知识点
- 还需要掌握的前端开发知识点
- 前端开发易忘细碎知识点笔记
- 纠正前端开发中容易出错知识点
- web前端开发几个知识点
- 前端开发过程中的一些小知识点总结
- 前端开发知识点
- 前端开发面试知识点大纲
- 前端开发必须掌握的一些知识点