原文地址: http://www.thomasfrank.se/sessionvars.html
译者: selfimpr
博客: http://blog.csdn.net/lgg201
邮箱: lgg860911@yahoo.com.cn
插件源代码解析: http://blog.csdn.net/lgg201/archive/2010/09/23/5902274.aspx
不使用cookie的session变量
我不喜欢javascript的cookie实现, 存储空间限制在4 * 20K每域名, 仅仅可以使用字符串类型, 并且获取和设置cookie的语法过于复杂.
最重要的是浏览器发送的每个请求头都会携带cookie, 而很多防火墙对请求报头长度有限制导致你的网页的加载可能被阻止.(我看到过这样的事情, 这很糟糕)
因此我写了这个小脚本, 以便于不使用cookie来实现javascript的session变量, 它允许你存储2MB的数据, 并且远比使用cookie来的简单.
使用方法:
当引入了sessvars脚本后, 就有了一个sessvars对象, 它基本上就是一个普通的javascript对象, 可以增加新的属性或者改变已有属性的值, 不同的是sessvars可以在不同的页面之间传递, 比如, 你可以使用:
sessvars.myObj = {name: "Thomas", age: 35}
在另一个引入了sessvars的页面中, 你同样可以通过sessvars.myObj得到这个对象.
方法: 在存储数据的时候, sessvars.$这个名字是不可以使用的, 因为它包含了一些插件内部实现的有用的方法
sesvars.$.clearMem(): 清除已经存储的所有数据
sessvars.$.usedMem(): 返回存储数据已经使用的内存大小, 单位KB
sessvars.$.usedMemPercent(): 返回存储数据已经使用的内存所占百分比
sessvars.$.debug(): 打印一个调试信息到页面, 包含已使用内存, 已使用内存百分比, 已存储所有数据
sessvars.$.flush(): 使当前已经保存的数据在下一次页面切换时也可以使用(因为直接通过sessvars.xx = xxx赋值的数据其实并不会立刻写入到window.name, 而是需要显示调用这个方法, 当然, 可以通过配置autoflush的方式自动刷入, autoflush默认是启用的)
属性/标记: 一些标记用来觉得sessvars的行为
sessvars.$.prefs.memlimit: 默认2000(KB), 只sessvars可以使用的最大内存, 这个值还会受浏览器限制, opera 9.25限制在2M左右, IE7.0, firefox1.5/2.0以及safari3.0都更高一些, 是10MB.
sessvars.$.prefs.autoFlush: 默认true, 决定sessvars是否在window.unload事件发生时自动的调用flush将数据写入window.name
sessvars.$.prefs.includeFunctions: 默认false, 决定sessvars是否可以存储方法
sesvars.$.prefs.includeProtos: 默认false, 决定sessvars是否存储对象的prototype中的值
表象的后面: 怎么样完成的数据存储?
window.name原来的目的是保存window和frame的名字以便于在脚本中使用名字定位访问, 为了不产生干扰, 在我的脚本中只使用了top.name
window.name的优势在于可以在页面切换的时候保存(哪怕是跨域), 并且它可以保存一个很长的名字, 不足之处在于它仅能存储字符串值, 我使用了JSON格式串来进行序列化/反序列.
最主要的是我在window.unload中做了自动的flush消除了每次值改变后去手动save/flush的工作.
安全注意事项:
sessvars有一个跨域选项(crossDomain), 但是它默认是false, 当它是false时你不能使用sessvars访问其他站点的window.name, 自己站点设置的数据别人则可以通过在浏览器地址栏输入javascript:alert(window.name)获取到.
因此, 请不要使用sessvars存储敏感信息比如密码, visa卡号等.
但是sessvars也有比cookie安全的地方: window.name的内容不会在请求头发送.
http://blog.csdn.net/lgg201/article/details/5902321
http://www.planabc.net/2008/09/01/window_name_transport/
分享到:
相关推荐
window.name 传输技术的美妙之处在于:name 值在不同的页面(甚至不同域名)加载后依旧存在,并且可以支持非常长的 name 值(2MB)。 window.name 传输技术的基本原理和步骤为: 1. name 在浏览器环境中是一个全局/...
在JavaScript的世界里,`window`对象是全局对象,它提供了与浏览器窗口进行交互的各种方法和属性。本篇文章将深入探讨`window.open()`、`window.opener`、`window.name`以及`window`对象的一些核心概念,同时通过两...
`window.name`是每一个浏览器窗口或标签页的一个全局属性,它可以存储任意类型的数据,包括字符串、数字、对象等,而且其容量非常大,理论上可以存储几MB的数据。当页面被刷新或者导航到其他URL时,只要新页面与原...
### JavaScript打开页面window.location与window.open的区别 #### 一、概述 在JavaScript中,`window.location` 和 `window.open` 都是用来控制浏览器导航的重要API,但它们在使用场景、功能特性和行为上有显著的...
在实际开发中,我们经常需要使用 window.open() 函数来打开新的页面,例如在点击某个按钮时打开一个新的页面,或者在某个事件触发时打开一个新的页面。但是,window.open() 函数的使用方式和参数配置却让很多开发者...
在JavaScript中,`window.open`方法是一个非常实用的功能,它允许开发者创建新的浏览器窗口或标签页,并在其中加载指定的网页内容。这个方法在交互式用户界面设计中尤其常见,例如用于显示警告、确认对话框或者...
在上面的代码中,我们首先使用 Window.open 方法打开一个新的窗口,然后使用 moveTo 方法将窗口移动到左上角,接着使用 focus 方法将焦点设置到新打开的窗口中,最后使用 blur 方法将焦点从当前窗口移除。...
在JavaScript的世界里,`window.open`、`iframe`和`dialog`是三个非常重要的概念,它们在网页交互和页面通信中扮演着关键角色。这里我们将深入探讨这些知识点,并结合实例来帮助你理解它们的用法。 1. `window.open...
`window.showModalDialog` 和 `window.open` 都是JavaScript提供的两种打开新窗口的方法,但它们在功能和使用场景上有着显著的区别。 首先,我们来详细探讨`window.showModalDialog`。`showModalDialog`方法用于...
`sFeatures` 为可选参数,类型为字符串,用于描述对话框的外观等信息,可以使用以下的一个或几个,用分号“;”隔开。 Window.showModalDialog() 方法的参数包括: * `dialogHeight`:对话框高度,不小于100 px ...
pro.js(此为AxhubChartsProV1.0.8.rplib所需要加载图形使用的JS文件) AxhubChartsPro可画的图形,包括:饼状图、柱状图、折线图、环形图,区间图,甘特图,面积图,色块图,玫瑰图,仪表盘,水波图,雷达图,漏斗图,k线图,...
在前端开发中,`window.open()` 方法是浏览器内置的一个功能,用于在JavaScript中打开新的浏览器窗口。本文将深入探讨如何使用 `window.open()` 方法及其参数设置,帮助开发者更好地掌握此方法的用法。 #### 一、`...
技术上,nameStorage 使用 window.name 存储数据。数据的生存周期为窗口会话的生存周期,同一个窗口可以通过 nameStorage 共享数据。出生证明window.name 非常有用,但不可滥用。为了规范、简单便利、安全的使用 ...
### Window.open() 方法详解 #### 一、方法简介 `window.open()` 是一个在Web开发中经常被用来创建新浏览器窗口或标签页的方法。此方法是 `window` 对象的一个属性,通过调用该方法可以指定打开的新窗口的URL、...
window.open使用方法以及参数说明一、window.open()支持环境: JavaScript1.0+/JScript1.0+/Nav2+/IE3+/Opera3+ 二、基本语法: window.open(pageURL,name,parameters) 其中: pageURL 为子窗口路径 name 为子窗口...
### window.open打开新窗口,不被拦截的方法 在Web开发中,经常会有需求需要在一个新的浏览器窗口或标签页中打开链接或展示内容。这通常通过JavaScript的`window.open()`方法来实现。但是,在实际应用中,由于...
标题中的"ClearWindow.py"指的是一个Python脚本文件,它是一个用于清理IDLE(Python的集成开发环境)屏幕的小插件。IDLE是Python自带的一个轻量级的IDE,提供了编辑、运行和调试Python代码的基本功能。这个"Clear...
javascript中window.confirm这个方法很好用,可以弹出一个确认对话框我们之所以弹出这个对话框,可能就是因为该操作很危险,所以要用户确认。但如果默认选择”确定”,则可能违背了这个原则。 另外,confirm对话框的...
原生JS打印插件之jQuery.EasyPrint.js使用文档 调用浏览器自带打印功能,使用JavaScript的 window.print(); 方法。 使用JS实现打印功能;JavaScript 实现打印操作;javascript打印大全;通用;js实现打印的方式;JS...
`window.print()` 是JavaScript中的一个内置方法,它可以帮助我们轻松实现这个需求。本篇将详细介绍如何利用HTML和JavaScript通过`window.print()`来实现这一功能。 首先,`window.print()` 方法是JavaScript中的一...