昨天接到一个小需求,就是在ipad上访问某页面,页面顶部出现一个下载客户端的提示,点击关闭按钮后,提示信息消失,信息存入cookie,在cookie未过期之前,除非用户自己清除浏览器的cookie,否则此提示信息不再显示。像类似这样的需求非常常见,而网站上使用cookie技术也比比皆是。今天就抽空整理下关于浏览器cookie的那些事儿。有些信息一笔带过,未做详细描述。如描述当中有错误,欢迎大家指出。

1. Cookie介绍

  cookie的传递流程是用户在访问站点时,服务器端生成cookie,发送给浏览器端储存,当下次再访问时浏览器会将该网站的cookie发回给服务器端,服务器端根据cookie信息显示特定的内容。简而言之就是浏览器端会储存你在这个站点的一些信息,比如登录状态,用户ID,密码、浏览过的网页、停留的时间等信息,记录在cookie里,方便下次访问时发送给服务器端。因为HTTP协议是无状态的,即服务器不知道用户上一次做了什么,这严重阻碍了交互式web应用程序的实现。服务器可以设置或读取cookie中的信息,借此维护用户跟服务器会话中的状态。

  cookie的使用也很普遍,比如说在电商网站中,用户挑选了商品后,商品信息会记录在cookie里,然后在购物车页面读取cookie里的商品内容。再比如当用户登录一个网站时,如果用户勾选了下次自动登录,则发送登录请求时,服务器会发送包含登录凭据(用户名和密码被加密过)的cookie到用户的硬盘上,则下次登录时,浏览器会发送该cookie到服务器端验证,这次用户不必输入用户名和密码就可以直接登录了。另外网站还可以利用cookie跟踪统计用户访问该网站的习惯,比如什么时间访问,访问了哪些页面,访问了页面的哪块信息,在每个网页的停留时间等。利用这些信息,一方面是可以为用户提供个性化的服务,另一方面,也可以作为了解所有用户行为的工具,对于网站经营策略的改进有一定参考价值。

  cookie是保存在客户端中,分为内存cookie和硬盘cookie。内存cookie由浏览器维护,保存在内存中,浏览器关闭就失效。硬盘cookie的存在时间长,有个过期时间,除非手工清理或是到了过期时间,否则不会删除,将过期时间设置为0或负值,这样在关闭浏览器时,cookie同样失效。

  cookie的大小限制在4kb左右,所以存放的内容不是很多。cookie在网络中的应用也有一些弊端,比如会影响到用户的隐私,安全,以及根据用户的浏览记录投放垃圾广告,给用户造成困扰等。

2. Cookie脚本设置

既然cookie在网站中也有不少用处,那如何设置cookie呢?下面简单介绍下利用JS如何设置cookie。

大致思路为:先读取document.cookie字符串,保存在自定义的cookie对象里,读取通过操作自定义的cookie对象来完成,删除,添加通过重写document.cookie字符串来操作。

 <script>
var __cookies = {}, // cookie数据缓存
__date = new Date(), // cookie涉及的时间处理对象
__currentms = __date.getTime(), // 当前时间值
__milliseconds = 24*60*60*1000; // 一天的毫秒数值 /* 取得cookie字符串
* @param {String} _key KEY值
* @param {String} _value 指定的值
* @param {String} _domain 域
* @param {Number} _expires 过期时间偏移,单位天
* @param {String} _path 路径
*/
var __getCookieStr = function(_key,_value){
if(arguments[3]) __date.setTime(__currentms + arguments[3]*__milliseconds);
var _path = arguments[4]?('path='+arguments[4]+';'):'',
_expires = arguments[3]?('expires='+__date.toGMTString()+';'):'',
_domain = arguments[2]?('domain='+arguments[2]+';'):'';
return _key+'='+_value+';'+_domain+_expires+_path;
}; /*
* 添加cookie信息,如果KEY已存在则覆盖原先内容
* @param {String} _key KEY值
* @param {String} _value 指定的值
* @param {String} _domain 域
* @param {Number} _expires 过期时间偏移,单位天
* @param {String} _path 路径
* @return {Void}
*/
_$setCookie = function(_key,_value){
document.cookie = __getCookieStr.apply(null,arguments);
__cookies[_key] = _value;
}; /* 获取cookie,根据key值获取 */
_$getCookie = function(_key){
return __cookies[_key]||'';
}; /*
* 删除cookie
* @param {String} _key 要删除cookie的KEY值
* @param {String} _domain 域
* @param {String} _path 路径
* @return {Void}
*/
_$delCookie = function(_key){
document.cookie = __getCookieStr(_key,'',arguments[1],-100,arguments[2]);
delete __cookies[_key];
}; /* 刷新cookie */
_$refreshCookie = function(){
var _arr = document.cookie.split(/\s*\;\s*/);
for(var i=0,l=_arr.length;i<l;i++){
__cookies[_arr[i].substring(0,_arr[i].indexOf('='))] = _arr[i].substring(_arr[i].indexOf('=')+1);
}
}; // init
_$refreshCookie();
</script>

关于浏览器cookie的那些事儿的更多相关文章

  1. Javascript中关于cookie的那些事儿

    Javascript-cookie 什么是cookie? 指某些网站为了辨别用户身份.进行session跟踪而储存在用户本地终端上的数据(通常经过加密).简单点来说就是:浏览器缓存. cookie由什 ...

  2. Chrome浏览器Cookie解密

    做过 web 开发的都知道:浏览器会把重要的认证登录认证信息存放到 cookie 中,在 cookie 有效期内,再次访问这个网站的时候就可以直接从 cookie 中获取到登录信息,这样就可以实现自动 ...

  3. 浏览器cookie数

    <?php for ($w=0; $w < 200 ; $w++) { setcookie('name'.$w,'value'.$w, time()+3600*10 ); } var_du ...

  4. JS读写浏览器cookie及读取页面参数

    JS读写浏览器cookie及读取页面参数 var zbrowser = { //设置浏览器cookie,exdays是cookie有效时间 setCookie: function (c_name, v ...

  5. python提取浏览器Cookie

    在用浏览器进行网页访问时,会向网页所在的服务器发送http协议的GET或者POST等请求,在请求中除了指定所请求的方法以及URI之外,后面还跟随着一段Request Header.Request He ...

  6. Java+selenium如何清理浏览器Cookie

    一.场景:在未注销系统切换不同账号登录系统下,登录会有浏览器缓存,导致登录时间异常缓慢.跟开发浏览器缓存处理机制有关系. 二.解决方法: 获取浏览器Cookie,在Login方法前增加清除缓存的代码. ...

  7. 如何知道网页浏览器cookie是什么?

    一直有网友问网页cookie如何获取,其实想知道自己访问网页时的cookie没那么难,用Chrome内核浏览器的debug功能就能看到,怎么查看呢?随ytkah一起来看看吧! 打开网页,按F12键,选 ...

  8. selenium webdriver处理浏览器Cookie

    有时候我们需要验证浏览器中是否存在某个cookie,因为基于真实的cookie 的测试是无法通过白盒和集成测试完成的.WebDriver 提供了操作Cookie 的相关方法可以读取.添加和删除cook ...

  9. 苹果微信内置浏览器cookie

    苹果微信内置浏览器cookie会被自动清掉,但safari不会清除,原因还未找到,解决方法是把前端把数据通过header传到后台

随机推荐

  1. nginx配置入门

    谢谢作者的分享精神,原文地址:http://www.nginx.cn/591.html nginx配置入门 之前的nginx配置是对nginx配置文件的具体含义进行讲解,不过对于nginx的新手可能一 ...

  2. 使用OLE DB读写Excel

    说明: 使用这种技术的好处是无需引用对象,坏处是无法处理类似合并单元格这样的复杂情况 一些更新: 为了使用Office 2010,需要安装Microsoft Access 2010 数据库引擎可再发行 ...

  3. 关于EditText的一点深入的了解

    最近在开发android下的记事本程序时,频繁的使用EditText控件,折腾来折腾去,算是对其的了解更深入了一些.特将这些收获记录如下: 一.几个属性的介绍 android:gravity=&quo ...

  4. Effective Java 53 Prefer interfaces to reflection

    Disadvantage of reflection You lose all the benefits of compile-time type checking, including except ...

  5. Effective Java 70 Document thread safety

    Principle The presence of the synchronized modifier in a method declaration is an implementation det ...

  6. 史上最全的MSSQL复习笔记 (转连接)

    http://www.cnblogs.com/gameworld/p/4790881.html

  7. cxf开发Restful Web Services

    一.restful web services rest全称是Representation State Transfer(表述性状态转移).它是一种软件架构风格,只是提供了一组设计原则和约束条件.在re ...

  8. APP原型设计工具,哪家强?转自知乎

    著作权归作者所有. 商业转载请联系作者获得授权,非商业转载请注明出处. 作者:李志超 链接:http://www.zhihu.com/question/20403141/answer/25329730 ...

  9. html点击按钮 弹出 多选择窗口级联下拉复选

    参考代码 代码示例1: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http:/ ...

  10. [转]ActionScript 3.0入门:Hello World、文件读写、数据存储(SharedObject)、与JS互调

    本文转自:http://www.cnblogs.com/artwl/p/3396330.html 近期项目中可能要用到Flash存取数据,并与JS互调,所以就看了一下ActionScript 3.0, ...