一個操作客戶端cooke的類
来源:互联网 发布:电脑端口号怎么设置 编辑:程序博客网 时间:2024/05/18 01:53
//***************************************
// HttpCookie
//
// 编写: 静静的黎明
// 功能: 客户端Cookie操作封装,
// 支持多值cookie
//
//***************************************
//
// 填补 ie 5.0的 Array.splice 函数
//
if(new Array().splice == null)
{
/// usage: array.splice(startPos,deleteCount,[item1,item2,...]);for ie5.0
Array.prototype.splice = function()
{
if(arguments.length < 2 || arguments[1] < 0)
return new Array();
var endPoint1 = arguments[0];
if(endPoint1 < 0 && Math.abs(endPoint1) > this.length)
endPoint1 = 0;
var startPoint2 = (endPoint1 < 0)? (this.length + endPoint1 + arguments[1]) : (endPoint1 + arguments[1]);
var bArray = this.slice(0,endPoint1);
var dArray = this.slice(endPoint1,startPoint2);
var eArray = this.slice(startPoint2);
var nArray = new Array();
for(var i = 2, al = arguments.length; i < al; i++)
{
nArray.push(arguments[i]);
}
var fArray = bArray.concat(nArray,eArray);
for(var i = 0, al = fArray.length; i < al; i++)
{
this[i] = fArray[i];
}
this.length = fArray.length;
return dArray;
}
}
//
// NameValueCollection 类
//
function NameValueCollection()
{
this.__keys = new Array();
this.__values = new Object();
this.__checkArg = function()
{
for(var i = 0, j = arguments.length; i < j; i++)
{
if(typeof arguments[i] != "string")
return false;
}
return true;
}
//
// 返回包含当前实例的所有键的字符数组
//
this.allKeys = function()
{
return this.__keys.concat();
}
//
// 获取与 NameValueCollection 中的指定键关联的值(字符数组)。
//
this.getValues = function(name)
{
if(!this.__checkArg(name))
{
throw new Error("Invalid type on NameValueCollection.getValues's argument.");
}
var values = this.__values[name.toLowerCase()];
return (values instanceof Array)? values : null;
}
//
// 将具有指定名称和值的项添加到 NameValueCollection。
//
this.add = function(name, value)
{
if(!this.__checkArg(name, value))
{
throw new Error("Invalid type on NameValueCollection.add's argument");
}
var key = name.toLowerCase();
if(this.__values[key] == null)
{
this.__keys[this.__keys.length] = name;
this.__values[key] = new Array(value);
}
else
{
this.__values[key][this.__values[key].length] = value;
}
}
//
// 获取与 NameValueCollection 中的指定键关联的值,
// 如果对应多个值,以逗号分割,参考getValues。
//
this.get = function(name)
{
if(!this.__checkArg(name))
{
throw new Error("Invalid type on NameValueCollection.get's argument");
}
var value = this.__values[name.toLowerCase()];
return (value instanceof Array)? value.join(",") : null;
}
//
// 设置或改变(该项不为空)NameValueCollection 中某个项的值。
//
this.set = function(name, value)
{
if(!this.__checkArg(name, value))
{
throw new Error("Invalid type on NameValueCollection.set's argument");
}
var key = name.toLowerCase();
if(this.__values[key] == null)
{
this.__keys[this.__keys.length] = name;
}
this.__values[key] = new Array(value);
}
this.hasKeys = function()
{
return this.__keys.length > 0;
}
//
// 清空NameValueCollection的所有键值。
//
this.clear = function()
{
this.__keys = new Array();
this.__values = new Object();
}
//
// 将具有指定键的项从当前实例中删除。
//
this.remove = function(name)
{
if(!this.__checkArg(name))
{
throw new Error("Invalid type on NameValueCollection.remove's argument");
}
var key = name.toLowerCase();
if(this.__values[key] == null)
return;
for(var i = 0, j = this.__keys.length; i < j; i++)
{
if(this.__keys[i] == key)
{
this.__keys.splice(i, 1);
this.__values[key] = null;
return;
}
}
}
}
//
// 类HttpCookie
//
function HttpCookie(name)
{
//
// 私有属性
//
this.__name;
this.__isExisted;
this.__expires;
this.__value;
this.__path;
//
// 公有属性:values; 类型:JScript.Collections.NameValueCollection;
//
this.values;
//
// 判定当前的 HttpCookie 实例是否存在。
//
this.isExisted = function()
{
return this.__isExisted;
}
//
// 判断当前的cookie是否具有子键。
//
this.hasKeys = function()
{
return this.values.hasKeys();
}
//
// 私有方法,分析cookie串
//
this.__analysisCooString = function(cstring)
{
var subCookies = cstring.split("&");
for(var k = 0, l = subCookies.length; k < l; k++)
{
var key, values, splitPos;
splitPos = subCookies[k].indexOf("=");
if(splitPos != -1)
{
key = subCookies[k].substring(0, splitPos);
values = subCookies[k].substring(splitPos + 1);
values = values.split(",");
//插入键值
for(var m = 0, n = values.length; m < n; m++)
this.values.add(key, values[m]);
}
else
{
this.__value = subCookies[k];
}
}
}
//
// 私有方法,初始化 cookie 。
// 如果以参数 name 为名字的cookie存在,则导入该cookie;
// 调用isExisted 方法则返回真,否则初始化一个新实例;调用
// isExisted()返回 false。
//
this.__init = function(name)
{
if(typeof name != "string")
throw new Error("Invalid type on HttpCookie's argument");
this.__name = (name != null)? name : "";
this.__value = "";
this.__isExisted = false;
this.__expires = null;
this.__path = "/";
this.values = new NameValueCollection();
var cookies = document.cookie.split("; ");
for(var i = 0, j = cookies.length; i < j; i++)
{
var name, value, splitPos;
splitPos = cookies[i].indexOf("=");
if(splitPos != -1)
{
name = cookies[i].substring(0, splitPos);
value = cookies[i].substring(splitPos + 1);
}
else
{
name = cookies[i];
}
if(this.__name.toLowerCase() == name.toLowerCase())
{
this.__isExisted = true;
if(value == null) return;
this.__analysisCooString(value);
break;
}
}
}
//
// 返回当前HttpCookie实例的名字。
//
this.getName = function()
{
return this.__name;
}
//
// 设定当前 HttpCookie 实例的值
//
this.setValue = function(value)
{
if(value != null)
{
this.__value = value.toString();
this.values = new NameValueCollection();
}
}
//
// 返回 当前 HttpCookie 实例的值
//
this.getValue = function()
{
var value = new String();
if(this.values.hasKeys())
{
var keys = this.values.allKeys();
for(var i = 0, j = keys.length; i < j; i++)
{
value += "&" + keys[i] + "=" + this.values.get(keys[i]);
}
}
return this.__value + ((this.__value == "")? value.substring(1) : value);
}
//
// 设定当前 HttpCookie 实例的过期时间;以秒为单位
// 当该方法未被调用时,实例默认跟随窗体存活期。
//
this.setExpires = function(secs)
{
if(typeof secs == "number")
{
var sysExpiresTime = new Date().getTime() + parseInt(secs) * 1000;
this.__expires = new Date(sysExpiresTime).toGMTString();
}
}
//
// 设定当前 HttpCookie 实例的的有效跟目录。
//
this.setPath = function(path)
{
if(path != null)
this.__path = path.toString();
}
//
// 将当前的HttpCookie实例配置写入 cookie。
//
this.save = function()
{
document.cookie = this.__name + "=" + this.getValue() + ";" +
((this.__expires != null)? "expires=" +this.__expires + ";" : "") +
"path=" + this.__path + ";";
}
//初始化
this.__init(name);
}
测试代码:
<script>
function enumCookieValues(coo)
{
//枚举
var keys = coo.values.allKeys();
alert("用HttpCookie.values.get枚举");
for(var i = 0, j = keys.length; i < j; i++)
{
alert( "key=" + keys[i] + "; value=" + coo.values.get(keys[i]) );
}
////////////////////////////////////////////////////
alert("用HttpCookie.values.getValues枚举");
for(var i = 0, j = keys.length; i < j; i++)
{
var valueArr = coo.values.getValues(keys[i]);
for(var k = 0, l = valueArr.length; k < l; k++)
{
alert("key=" + keys[i] + ";value=" + valueArr[k]);
}
}
}
//简单的单值cookie的例子,需要效果请拿掉注释
// var coo = new HttpCookie("cookie");
// coo.setValue("cookie的值");
// coo.save();
// alert(coo.getValue());
// 多值cookie
var coo = new HttpCookie("cookie1");
if(coo.isExisted() == false)
{
//set 重写或设定, add方法不重写原来的键值
coo.values.set("language", "javascript");
coo.values.add("method", "post");
coo.values.add("method", "get");
coo.save();
//枚举
enumCookieValues(coo);
}
else
{
//枚举
enumCookieValues(coo);
//删除一个键值
coo.values.remove("method");
//设定过期时间秒数,这里设定为当前时间,就是删除
coo.setExpires(0);
coo.save();
}
</script>
- 一個操作客戶端cooke的類
- 在客户端设置cooke和获取cooke的函数
- 在客户端设置cooke和获取cooke的函数
- 作客的狗
- 欢迎到我的百度空间作客
- 作客御风博客聊创业 感受首记安安的魅力
- 在韩家炜老师的实验室和家里作客 — 旅美散记之二
- 我在比尔.盖茨家作客
- SOA技术专家作客CSDN聊天室
- 疯狂英语李阳激情作客直播室
- java基础巩固----Cooke技术和Session技术详解
- 紧急通知:本书作者将作客CSDN聊天室
- 腾讯游戏项目总监姚晓光作客51CTO技术聊天室
- 蛮牛社区段子手李剑英作客专家在线
- Matt Cooke: He Won't Be Suspended for the Rest of the NHL Season and Playoffs
- 前乒乓球世界冠军邓亚萍作客华奥新浪嘉宾聊天室记录(1)
- 前乒乓球世界冠军邓亚萍作客华奥新浪嘉宾聊天室记录(2)
- 4月10日,C语言技术专家作客51CTO技术聊天室
- [收录]ASP.NET程序中常用的三十三种代码
- 〖收藏〗如何升级hotmail邮箱容量?
- 新年新期盼
- java中的数字格式化
- 历届奥斯卡最佳外语片
- 一個操作客戶端cooke的類
- 我的中文简历--2007版
- Hibernate 的原理与配置
- Control Study -> 检索浏览器性能
- 我的英文简历--2007版
- asp中使用FileSystemObject
- 测试....
- 新年寄语!
- java thread worker thread 小例