javascript操纵javascript笔记

<?php
//@sgsheg
//@time  9/28
/*
js来操纵cookie?
+----------------------------------------------------------------------------------+
cookie是保存在用户计算机上的少量数据.它与特定的WEB页面与WEB站点关联起来,自动在WEB浏览器和WEB服务器之间进行传递.

比如你运行的是window操作系统,使用Internet Explorer上网,那么你会发现你的window下有一个子目录Temporary Internet Files.
+----------------------------------------------------------------------------------+
对于管理细小的/不重要/不想保存在中央数据库里的细节信息,Cookies是个不错的方案.比如目前网站在不断增加的自定义服务,可以每个用户定制他们的内容.如果你设计的就是这样的一个站点,那么你怎么来管理这样的信息.
1.使用用户名和口令,通过SSL登录
2.在服务器的数据库检查用户名和口令,如果登录成功,建立一个当前时间标签的消息摘要(比如md5),并把保存在cookie和服务器数据库里面.把用户登录时间保存在服务器数据库里面的用户记录里面.
3.在进行每个安全事务时,把cookie的消息摘要和保存在服务器数据库的摘要,如果比较失败,就把用户引导到登入股录界面.
4.如果第三步检查通过,那么检查当前时间和登录时间之音经过的时间是否超出了允许的时间的长度.如果用户超时了,引导用户到登录界面.
5.如果第三步和第四步都通过了,那么把登录时间重新设置为当前的时间,允许事务的发生.那么需要你登录的安全站点,可能多数使用的是和这里介绍类似的方法.
+----------------------------------------------------------------------------------+
cookie最初设计的时候,是为了CGI.我们也可以使用js脚本来操纵cookie.在本文里面

当你读取cookie的时候,就得到一个字符串,里面当前的web使用的所有的cookie的值和名称.每个cookie除了name名字和value值这两个意外,还有四个属性,

expires过期时间,path路径,domain域名以及secure安全.

expires---过期时间,指定cookie的生命周期.具体的值是过期日子.如果让cookie的存在期限超过浏览器会话时间,就必须使用这个属性.当过了到期日期,浏览器可以删除cookie文件,没有任何影响.

path路径,指定与cookie关联的WEB页面.值可以是一个目录,或者是一个路径.如果http://www.jzxue.com/html/java/建立一个cookie,那么在http://www.jzxue.com/html/java/目录里的所有页面,以及该目录下任何子目录里的页面都可以访问这个cookie.这就是说,在http://www.jzxue.com/html/java/stories/articles里的任何页面都可以访问,http://www.jzxue.com/html/java/index.html建立的cookie.但是,如果来自同一服务器里,URL里面有相同路径的所有WEB页面都可以共享为cookie.现在有一个例子,

secure  --安全
指定的cookie的值通过网络如何在用户和WEB服务器之间传递,这个属性的值或者是secure,或者为空.缺省的情况下,该属性为空.缺省的情况下,该属性为空,也就是使用不安全的HTTP连接传递数据.
如果一个cookie标记为secure,那么,他与WEB服务器通过HTTPS或者是其他安全协议来传递数据.不过设置了secure属性不代表他人看到你机器本地保存的cookie.换句话,就是把cookie设置为secure,只是保证了cookie和服务器之间的数据传输之间加密,而保存在本地的cookie文件并不加密.如果让本地cookie也加密,得自己加密数据.


操纵cookies
请记住,cookie就是文档的一个字符串属性.要保存cookie,只要建立一个字符串,格式是name=<value>(名称=值),然后把文档的document.cookie设置成与他相等即可.比如,假设想保存表单接收的用户名,那么代码看起来就是这样.
document.cookie="username"+escape(form.username.value);

在这里,使用escape()函数非常重要,因为cookie值里面可能含有分号,逗号或者是空格.在读取cookie的时候,必须使用相对应的unescape()函数给值解密.

name=<value>[;expires=<data>][;domain=<domain>][;path=<path>][;secure]

名称=<值>[;expires=<日期>][;domain=<域>][;path=<路径>][;secure];
<value>,<data>,<domain>和<path>应当有其对应的值替换.


Secure--安全.指定cookie的值通过网络如何在用户和web服务器之间传递.这个属性或者是secure,或者为空.缺省的情况下,该属性为空,也就是使用不安全的HTTP连接传递数据.如果一个cookie标记为secure,那么它和服务器之间就通过HTTPS或者其他安全协议传递数据.不过,设置了secure属性的不代表其他人不能看到你机器本地保存的cookie.换句话说,把cookie设置为secure,只保证cookie与web服务器之间的传输过程加密,而保存在本地的cookie文件并不被加密.如果想让本地cookie也加密,得自己加密数据.


操纵Cookies
请记住,cookie就是文档的一个字符串属性.要保存cookie,只要建立一个字符串,格式是name=<value>(名称=值),然后把文档的document.cookie设置成与它相等即可.比如,假设要保存表单接收到的用户名,那么代码看起来就像这样.

document.cookie="username"+escape(form.username.value);
+----------------------------------------------------------+
escape:对String对象编码以便他们能在计算机上可读.
必选项charstring参数是要编码的任意的String对象或者文字.
escape方法不能用来统一资源代码示例(URI)进行编码.
+----------------------------------------------------------+
在这里escape()函数非常重要,因为cookie值可能包含分号,逗号或者空格.这就是说,在读取cookie值的时候还得介绍cookie的四个属性

//@sgsheg
//@ 9/30

name=<value>[;expires=<date>][;domain=<domain>][;path=<path>][;secure]
名称=值[;expires=<日期>][;domain=<域>][;path=<路径>][;安全]

<value>,<date>,<domain>和<path>应当用对应的值替换.<date>应当使用GMT格式,可以使用Javascript脚本语言的日期Date的toGMTString()方法得到这一GMT格式的日期值,方括号代表这项是可选的.比如在[;secure]的两边的方扩号代表要想把cookie设置成安全的,就需要把";secure"加到cookie字符串值的后面.如果";secure"没有加到cookie字符串后面,那么这个cookie就是不安全的.不要把尖括号<>和方括号[]加到cookie(除非它们是某些值的内容).设置属性时,不限属性,可以用于任何顺序设置.

下面是一个例子,在这个例子里,cookie的"username"被设置成15分钟之后过期,可以被服务器上的所有目录访问,可以被"mydomain.com"域里的所有服务器访问,安全状态为安全.

//Date()的构造器设置为毫秒为单位
//.getTime()方法返回时间,单位为毫秒
//要设置成15分钟到期,要用60000毫秒乘以15分钟
//
var expiration=new Date((new Date()).getTime()+15*60000);
document.cookie="username="+escape(form.username.value)+";expires="+expiration.toGMTString()+";path="+"/"+";_domain="+"mydomain.com"+";secure";

读取cookie值有点像个小把戏,因为你一次得到了属于当前文档的所有cookies

//下面这个语句读取了属于当前文档的所有cookie

var allcookies=document.cookie;

现在,我们得解析allcookie变量里面的不同cookie,找到感兴趣的指定cookie.这个工作很简单,因为我们可以利用Javascript语言提供的扩展字符串支持.

如果我们对前面分配的cookie"username"感兴趣,可以使用下面的脚本来读取它的值/

function getCookie(cookie_name){
 
 var allcookie=document.cookie;

 var cookie_pos=allcookies.indexof(cookie_name);

 //如果找到了索引,就表示cookie存在
 //反之,就说明不存在
 //
 if(cookie_pos != -1)
 {
  //把cookie_pos放在值的开始,只要给值加1即可.
  cookie_pos += cookie_name.length + 1;

  var cookie_end = allcookies.indexOf(";",cookie_pos);

  if(cookie_end == -1){
   cookie_end= allcookies.length;
  }

  var value = unescape(allcookies.substring(cookie_pos,cookie_end);
 }
 return value;
}

//调用函数
var cookie_val = getCookie("username");

上面的例中的cookie_val 变量可以用来生成动态内容,或者发送给服务器端CGI脚本进行处理.现在你知道了使用javascript脚本操纵cookie的基本方法.但是,如果你跟我一样,那么我们要做一件事情,就是要建立一个接口函数,把cookie处理的麻烦隐藏起来.不过在你编程之前,稍等片刻,你要做的就是到哪里去找这些接口函数.


很多人利用cookie来做流量分析,点击跟踪.cookie也不是非常安全,特别是没有secure属性的cookies.不过你和别人公用计算机,那么别人很可能窥探计算机上面的cookies文件.

 
总而言之要保持cookie的简单.不要依赖cookie的存在,不要再每个cookie里面保存太多的信息.不要保存太多的cookie.但是,抛出了这些限制外,cookie的概念是一个有用的工具.


克服掉每个WEB服务器20个cookies的限制

<script type="text/javascript"><!--mce:0--></script>
<form id="form1" action="#" accetpt-charset="UNKNOW" enctype="application/x-www-form-urlencode" method="post">
输入用户名:
<input type="userName" type="text">
<input onclick="setCookie()" name="cookieEnabled" type="radio" value="radiobutton">
保存Cookie
<label>
<input onclick="showValue()" name="Submit" type="button" value="显示"/>
</label>
<label>
<input type="clearValue()" name="Submit2" type="button" value="清除">
</label>
</form>

posted @ 2012-09-30 23:47  sgsheg  阅读(195)  评论(0编辑  收藏  举报