惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

Jina AI
Jina AI
V
Vulnerabilities – Threatpost
Security Latest
Security Latest
AI
AI
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
量子位
H
Help Net Security
Attack and Defense Labs
Attack and Defense Labs
The GitHub Blog
The GitHub Blog
L
LINUX DO - 最新话题
A
Arctic Wolf
博客园_首页
S
Securelist
S
Secure Thoughts
Google DeepMind News
Google DeepMind News
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
T
Tailwind CSS Blog
Apple Machine Learning Research
Apple Machine Learning Research
酷 壳 – CoolShell
酷 壳 – CoolShell
Stack Overflow Blog
Stack Overflow Blog
N
Netflix TechBlog - Medium
Cyberwarzone
Cyberwarzone
小众软件
小众软件
T
Threatpost
Exploit-DB.com RSS Feed
Exploit-DB.com RSS Feed
Blog — PlanetScale
Blog — PlanetScale
N
News and Events Feed by Topic
NISL@THU
NISL@THU
Forbes - Security
Forbes - Security
博客园 - 聂微东
F
Fortinet All Blogs
Simon Willison's Weblog
Simon Willison's Weblog
H
Heimdal Security Blog
罗磊的独立博客
S
Security @ Cisco Blogs
B
Blog
T
Troy Hunt's Blog
Engineering at Meta
Engineering at Meta
cs.CL updates on arXiv.org
cs.CL updates on arXiv.org
The Hacker News
The Hacker News
The Last Watchdog
The Last Watchdog
Hacker News - Newest:
Hacker News - Newest: "LLM"
I
Intezer
T
Threat Research - Cisco Blogs
C
Cybersecurity and Infrastructure Security Agency CISA
The Cloudflare Blog
S
Schneier on Security
月光博客
月光博客
L
LINUX DO - 热门话题
cs.CV updates on arXiv.org
cs.CV updates on arXiv.org

博客园 - Ray Lynn

使用 flex air 读写文件 - Ray Lynn Google Chrome 源码下载 什么是SAAS? QQ盗号木马原理 WindowsSockets 错误码 使用 Microsoft SOAP Toolkit 2.0 建立安全 Web 服务 历史上最强的代码 饭否,唧歪们MSN、QQ、GTalk机器人实现原理及代码 这是比月读还强的幻术!! - Ray Lynn - 博客园 .net 中的伪静态方式. 来自 Discuz!NT 伪静态网页的实现 ACCESS 创建表及索引方式 VB6 判断网络是否正常类 眼保健操 面向服务的面向业务基础 VB6编程中如何获取硬盘分区信息 原味香菇片蒸鸡腿 定制特性学习笔记 [转]C#中的定制特性(Attributes)
js操作cookies类
Ray Lynn · 2007-10-22 · via 博客园 - Ray Lynn

方法一:

<scriptlanguage="JavaScript">

function Cookie(delim){//操作Cookie类

     Array.prototype.splice=function(){

         var len=arguments.length,tarray=[],i=arguments[0]+arguments[1];

         if(len>1){

            while(i<this.length)tarray[tarray.length]=this[i++];

            this.length=arguments[0];

            if(len>2)for(var i=2;i<len;i++)this[this.length]=arguments[i];

            var tlen=tarray.length,i=0;

            while(i<tlen)this[this.length]=tarray[i++];

            }

        return this;

         }

     this._Cookie=[];

     this.Load=function(){

         if(document.cookie.indexOf(";")!=-1){

            var _sp,_name,_tp,_tars,_tarslength;

            var _item=document.cookie.split(";");

            var _itemlength=_item.length;

            while(_itemlength>0){

                _sp=_item[--_itemlength].split("=");

                _name=_sp[0];

                _tp=_sp[1].split(",");

                _tars=_tp.slice(1,_tp.length);

                this._Cookie[_name]=[];

                this._Cookie[_name]=_tars;

                this._Cookie[_name]["timeout"]=_tp[0];

                }

            return true;

            }

        return false;

         }

     this.Save=function(){

         var _str,_ars,_mars,_marslength,timeout,i,key;

         for(key inthis._Cookie){

            if(!this._Cookie[key])return;

            _str=[];

            _mars=CookieClass._Cookie[key];

            _marslength=_mars.length;

            for(i=0;i<_marslength;i++)_str[_str.length]=escape(_mars[i]);

             document.cookie=key+"="+_mars["timeout"]+(_str.length>0?",":"")+_str+";expires="+new Date(parseInt(_mars["timeout"])).toGMTString();

            }

         }

     this.GetCookieCount=function(){

         var _length=0,key;

        for(key in this._Cookie)_length++;

        return _length;

         }

     this.Create=function(name,days){

         this._Cookie[name]=[];

         this._Cookie[name]["timeout"]=new Date().getTime()+days*86400000;

         }

     this.Modify=function(name,days){

         this.Create(name,days);

         }

     this.GetTime=function(name){

        return new Date(parseInt(this._Cookie[name]["timeout"]));

         }

     this.Delete=function(name){

         this.Create(name,0);

         }

     this.AddItem=function(name,value){

         this._Cookie[name][this._Cookie[name].length]=value;

         }

     this.DelItem=function(name,index){

         this._Cookie[name].splice(index,1);

         }

     this.GetCount=function(name){

        return this._Cookie[name].length;

         }

     this.GetItem=function(name,index){

        return this._Cookie[name][index];

         }

     }

</script>

<scriptlanguage="JavaScript">

/*

====================================

Design :Flashsoft

====================================

浏览器能够通过Cookies保留有关数据。象Windows的注册表一样,用户不必知道Cookies的具体位置,浏览器能找到这些数据。第六代 的浏览器,不管是IE还是NS都支持document.cookie属性。通过这个属性来读取或修改Cookies的值。不过Cookies的存储形式是 非结构化的长字符串,需要经过相应的解析后才有意义。

Cookies的表达如下,除了name=value以外,其它均为可选:

name=value;

expires=date;

domain=domainname

path=pathname;

secure;

例如:

User=HockeyDude;expires=Thu,01-Jan-70 00:00:01 GMT; domain=www.mydomain.com; path=/images;secure;

Pass=Gretzky; expires=Thu,01-Jan-7000:00:01 GMT; domain=www.mydomain.com; path=/images; secure;

这么长的两个字符串只代表了两个Cookies。如果还要再加上电子信箱或其他信息就还得加长字符串。通常都是通过分解这样的字符串来取得各个变量或元素的。这实在是费时费力的事。

使用面向对象设计(ObjectOriented Design,OOD)的思路来编写Cookies处理函数,其特点如下:

便于增删子项。这是很重要的,有些浏览器限制Cookies的使用数量。

通过修改函数可以容易地修改时效数据。通常的做法很麻烦,要拷贝Cookies,删除原Cookies,修改并重写Cookies。

Cookies和它的子项存放在数组里。可以根据需要快速而有效地进行修改。这样也无须解析那长长的字符串。

Cookies对象的使用

以下是对象的公有方法:

方括号[]内是可选参数

//构造

Cookie([定界符,缺省为句点]) - 构造函数

//初始化

GetCookieCount() - 返回Cookies数量

Create(name, days) - 创建Cookies及其时效天数

Modify(name, days) - 修改Cookies的时效天数

Delete(name) - 删除Cookies及其子项

GetTime(name) - 返回指定Cookies的过期时间

GetCount(name) - 返回Cookies的子项数量

AddItem(name,value) - 增加一个子项

GetItem(name,index) - 返回指定索引的子项

DelItem(name,index) - 删除指定的子项

//存取

Load() - 读取Cookies

Save() - 存储Cookies

下面是应用实例:

*/

var CookieClass=new Cookie();

if(!CookieClass.Load()){

     CookieClass.Create("Pass",1);

     CookieClass.Create("User",1);

     CookieClass.AddItem("Pass","Ps1");

     CookieClass.AddItem("Pass","Ps2");

     CookieClass.AddItem("Pass","Ps3");

     CookieClass.AddItem("Pass","Ps4");

     CookieClass.AddItem("Pass","Ps5");

     CookieClass.AddItem("Pass","Ps6");

     CookieClass.DelItem("Pass",1);

     CookieClass.Save();

     }

alert("Cookie过期时间:"+CookieClass.GetTime("Pass").toLocaleString());

alert(document.cookie);

</script>

方法二:

<script language="Javascript">

function eyunCookie(){

     this.key="";//初始化key。

     this.value="";//初始化key's value。

     this.expires=0;//初始化cookie的有效时间,单位毫秒。

     this.init=function(){//对象初始化

         this.key="";

         this.value="";

         this.expires=0;

     }

     this.set=function(key,value,expires){//设置cookie

         if(this.key=="")this.key=key;

         if(this.value=="")this.value=value;

         if(this.expires<=0)this.expires=expires;

         if(this.key==""||typeof(this.key)!="string"){

            alert("请先设置欲保存的cookie名称!");

            this.init();

            return false;

         }

         if(this.key.match(/[,; ]/)){

            alert("cookie名称中不能包含“,”、“;”或空格!");

            this.init();

            return false;

         }

         if(this.value.toString().match(/[,; ]/)||typeof(this.value)=="undefined"){

            alert("cookie值中不能包含“,”、“;”或空格!");

            this.init();

            return false;

         }

         if(this.expires<=0||typeof(this.expires)!="number"){

            alert("请先正确设置cookie的有效时间!");

            this.init();

            return false;

         }

         var cookie=document.cookie;

         if(cookie.indexOf(this.key+"=")!=-1){

            if(!confirm("欲保存的cookie名称已经存在,是否要进行替换?")){

                this.init();

                return false;

            }

         }

         var dt=new Date();

         dt.setTime(dt.getTime()+this.expires);

        document.cookie=this.key+"="+this.value+";expires="+dt.toGMTString();

         this.init();

        return true;

     }

     this.get=function(key){//取得名为key的cookie的值

        if(key==""||key.match(/[,; ]/)){

            alert("请正确设置欲查找的cookie名称!")

            return false;

         }

         var cookie=document.cookie;

         var start=cookie.indexOf(key+"=");

        if(start==-1){

            alert("欲查找的cookie不存在!")

            return false;

         }

         var end=cookie.indexOf(";",start);

        if(end==-1)end=cookie.length;

         var getCookie=cookie.substring(start+key.length+1,end);

        alert("cookie:"+key+"的值为"+getCookie);

        return getCookie;

     }

     this.showAll=function(){//显示所有cookie

        alert("共有以下cookie对:\n"+document.cookie.split(";").toString().replace(/,/g,"\n"));

     }

     this.del=function(key){//删除名为key的cookie

        if(key==""||key.match(/[,; ]/)){

            alert("请正确设置欲删除的cookie名称!")

            return false;

         }

         var dt=new Date();

         dt.setTime(dt.getTime());

         document.cookie=key+"=eyunDelete;expires="+dt.toGMTString();

         this.init();

        return true;

     }

     this.destroy=function(){//销毁所有cookie

         var dt=new Date();

         dt.setTime(dt.getTime());

        while(document.cookie!=""){

            document.cookie=document.cookie+";expires="+dt.toGMTString();

            this.init();

            return true;

         }

     }

}

var cookieTest=new eyunCookie()

function settest(){

     cookieTest.key="test"

     cookieTest.value="ok"

     cookieTest.expires=31536000000

     cookieTest.set()

}

</script>

<input type=button onclick=cookieTest.showAll() value=read>

<input type=button onclick="cookieTest.set('a','test',31536000000)" value=setA>

<input type=button onclick="settest();" value=setTest>

<input type=button onclick="cookieTest.destroy()" value=clear>

<input type=button onclick=cookieTest.get("test") value=gettest>

<input type=button onclick=cookieTest.get("a") value=geta>

<input type=button onclick=cookieTest.set("test",1,31536000000) value=resetTest>

<input type=button onclick=cookieTest.del("test") value=delTest>


Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=614897