cookie和AJAX
来源:前端程序人生阅读:0时间:29 分钟前
摘要:可见性和安全性.第一个属性是expires,它指定了cookie的生存期... 还能把Ajax形式化到一个RPC机制中.在这种形式中,Web开发者...
cookie和客户端持久性
除了名字与值外,每个cookie都有四个可选的属性,分别控制它的生存周期,可见性和安全性。第一个属性是expires,它指定了cookie的生存期。默认情况下,cookie是暂时存在的,它们存储的值只在浏览器会话期间存在。当用户退出浏览器后,这些值也就丢失了。
第二个重要的属性是path,它指定了与cookie关联在一起的网页。默认情况下,cookie会和创建它的网页以及与这个网页处于同一个目录下的网页和处于该目录的子目录下的网页关联。
第三个cookie属性DOMain。假定由位于catalog.example.com的网页以及所有位于example.com的其他服务器上的网页都能够访问这个cookie。如果没有设置cookie的domain属性,该属性的默认值就是创建cookie的网页所在的服务器的主机名。注意,不能将一个cookie的域设置成服务器所在的域之外的域。
cookie的最后一个属性是名为secure的布尔值,它指定了在网络上如何传输cookie值。默认情况下,cookie是不安全的,也就是说,它们是通过一个普通的、安全的Http链接传输的。但是如果将cookie标记为安全的,那么它将只在浏览器和服务器通过HTTPS或其他的安全协议链接时才被传输。
注意,expires、max-age、path、domain和secure都是cookie的属性,而不是javaScript对象的属性。
在JavaScript代码中使用cookie之前,希望首先查看它们是否激活。在大多数浏览器中,都可以通过检查navigator.cookieEnabled属性来做到这一点。如果结果为true,cookie就是激活的;如果为false,cookie就是关闭的。这并非一个标准属性,如果发现在将要运行代码的浏览器中没有定义这一属性,必须尝试写入、读取和删除一个测试cookie来检测其对cookie的支持。
短暂的记录一个cookie,以name=value,的形式设置成一个字符串即可
document.cookie = "version=" + encodeURIComponent (documen.lastModified);当下次读取cookie属性时,存储的name/value属性对就会被添加到文档的cookie列表中。cookie值不能包含分号、逗号或空白符。因此,需要使用核心JavaScript的全局函数encodeURIComponent()在把值存入cookie之前对它进行编码。如果这么做了,那么在读cookie值时,就必须使用相应的decodeURIComponent()函数。
用一个简单的name/value对编写的cookie只能在当前的Web浏览会话期间存活,当用户退出浏览器时它就会丢失。要创建可以在跨浏览器会话期中持续存在的cookie,可以通过max-age属性来设置其生命期。表达式为name=value;max-age=seconds
如:
document.cookie = "version=" + document.lastModified + ";max-age=" + (60*60*24*365);
cookie主要用于少量数据的不经常存储。它们既不是一种通用的通信机制,也不是一种通用的数据传输机制,所以使用它们一定要适度。标准不允许浏览器保存超过300个cookie,为每个web服务器保存的cookie数不能超过20个,而且每个cookie保存的数据不能超过4KB。实际上,现代浏览器允许总数cookie多于300个,但是, 一些浏览器仍然有4KB的大小限制。
构造函数cookie()读取了一个指定的cookie的值,一个cookie的store()方法在该cookie里存储数据,使用指定的lifetime、path和domain,而cookie的remove()方法通过将其max-age属性设置为0来删除该cookie。
使用cookie来实现客户端持久性有几个缺点:
1、数据的大小限制在4KB;
2、即便cookie仅为客户端脚本而使用,它们还是要上传到Web服务器上,以满足和它们相关的任意Web页面的要求。当cookie在服务器上没有使用的时候,造成了带宽浪费。
以Javascript对象和数组直接量的形式来编码数据,这叫做json。
Ajax应用程序的关键特征就是,它使用脚本化的HTTP来与一个Web服务器通信而没有导致页面重载。既然交换的数据常常很少,并且浏览器不一定必须解析和提交一个文档,响应时间大大改善,并且结果使得Web应用程序给人的感觉更像是传统的桌面应用程序。
Ajax应用程序的另一个可选的特征就是使用XML作为编码来进行客户机和服务器之间的数据交换。一些Ajax应用程序使用XSL来区分内容和表现。这种方式有一个另外的好处,就是减少了从服务器到客户机所传输的数据的数量,避免了从服务器到客户机的转换。
还能把Ajax形式化到一个RPC机制中。在这种形式中,Web开发者在客户端和服务器都使用底层的Ajax库来促进客户机和服务器之间的高层通信。
**********************************
创建Ajax应用程序所面临的最大挑战不是技术。核心的Ajax技术是成熟的,稳定的,也易于理解。相反,这些应用程序的设计者所面临的挑战是:忘掉我们认为自己所知道的Web的限制,并且开始想象一种更为宽阔、更为广泛的可能性。
**********************************
关于Ajax的警告
第一个问题是可视化反馈。当用户点击一个传统的超链接,Web浏览器会提供反馈,表示链接的内容正在发送。
第二个问题和URL有关。传统的Web应用程序通过载入新的页面来从一种状态转换到另一种状态,并且每个页面都有一个专门的URL。对于Ajax应用程序来说并不是这样,当一个Ajax应用程序使用HTTP脚本化来载入和显示新内容时,地址工具栏中的URL并不会改变。用户可能想要在应用程序中以书签标记一种特定的状态,并发现无法使用浏览器的书签工具来做到这一点。它们甚至不能从浏览器的地址工具栏复制和粘贴一个URL。
能够在一个URL中封装应用程序状态,并且这些URL在需要的时候应该能够供用户使用,这仍然很重要。
第三个问题和后退按钮有关。通过从浏览器自身取走HTTP的控制,使用XMLHttpRequest的脚本就绕开浏览器的历史机制。用户习惯用后退和前进按钮来导航Web。如果一个Ajax应用程序使用HTTP脚本化来显示大量新内容,用户可能试图使用这些按钮在应用程序中导航。当他们这么做,他们可能会失望的发现后退按钮把浏览器带回到应用程序之外,而不是只回到最近显示的部分。