`
jianzong2000
  • 浏览: 54665 次
  • 性别: Icon_minigender_1
  • 来自: 南京
文章分类
社区版块
存档分类
最新评论

转:一款用window.name产生前台session存储的js插件

阅读更多

 

 

原文地址: 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解决跨域问题的文档

    window.name解决跨域问题的文档,刚才网上发现的.也许有点作用

    Pixi.js动画插件pixi-action.zip

    pixi-action,一个类似 cocos2d-x 使用方法的 Pixi.js 动画插件。 var renderer = new PIXI.autoDetectRenderer(800,600); document.body.appendChild(renderer.view); var stage = new PIXI.Container();...

    跨域问题 之 window.name

    NULL 博文链接:https://yiminghe.iteye.com/blog/346796

    AxhubChartsProV1.0.8.rar.zip

    pro.js(此为AxhubChartsProV1.0.8.rplib所需要加载图形使用的JS文件) AxhubChartsPro可画的图形,包括:饼状图、柱状图、折线图、环形图,区间图,甘特图,面积图,色块图,玫瑰图,仪表盘,水波图,雷达图,漏斗图,k线图,...

    js取得DIV的top,left,width,height值.doc

    js取得DIV的top,left,width,height值 ClientInfo = ClientInfo + "userAgent : "+window.navigator.userAgent+ " "; ClientInfo = ClientInfo + "appName : "+window.navigator.appName+ " "; ...

    利用window.name跨域解决方案Demo.rar

    本Demo实现了一个来自不同服务器的前端页面集成方案,页面间通过window窗口关系形成父子页面关系,跨域情况下父子页面间彼此看不见对方的DOM和js对象,无法直接进行数据交互。本方案从父页面到子页面数据传递采用url...

    session.js, Session.js 获取用户会话信息.zip

    session.js, Session.js 获取用户会话信息 Session.js提供有关当前会话的信息。要使用:包括文件 session.js, 然后访问访问者对象。 它使用google加载器获取位置数据。 对于异步加载,请使用 window.session_loaded ...

    window.showModalDialog模式对话框和 window.open的区别

    NULL 博文链接:https://shawnfree.iteye.com/blog/598885

    原生JS打印插件之jQuery.EasyPrint.js使用文档

    原生JS打印插件之jQuery.EasyPrint.js使用文档 调用浏览器自带打印功能,使用JavaScript的 window.print(); 方法。 使用JS实现打印功能;JavaScript 实现打印操作;javascript打印大全;通用;js实现打印的方式;JS...

    Javascript中封装window.open解决不兼容问题

    对window.open进行封装, 使其更好用, 且更兼容, 很多人说window.open不兼容,其实不是, 因为不能直接执行, 必须通过用户手动触发才行;看代码: 代码如下 var openWindow = function(url, options) { var str = ""; ...

    重写javascript中window.confirm的行为

    javascript中window.confirm这个方法很好用,可以弹出一个确认对话框我们之所以弹出这个对话框,可能就是因为该操作很危险,所以要用户确认。但如果默认选择”确定”,则可能违背了这个原则。 另外,confirm对话框的...

    107个常用javascript语句

    90.window.history.back()返回上一页,window.history.forward()返回下一页,window.history.go(返回第几页,也可以使用访问过的URL) 91.document.write()不换行的输出,document.writeln()换行输出 92.document.body....

    FormData:FormData支持其中window.FormData未定义

    FormData:FormData支持其中window.FormData未定义

    javascript弹出窗口 window.open使用方法以及参数说明分析篇

    window.open使用方法以及参数说明一、window.open()支持环境: JavaScript1.0+/JScript1.0+/Nav2+/IE3+/Opera3+ 二、基本语法: window.open(pageURL,name,parameters) 其中: pageURL 为子窗口路径 name 为子窗口...

    风声JS弹出层 弹出框插件.rar

    Javascript弹出窗口,弹出对话框,仿VISTA风格,本程序为模拟WEB弹出窗口和对话框提供一种方案。程序基于 JavaScript/XHTML/CSS 标准实现,适应广泛的服务器/浏览器环境,支持自由度极高的窗口样式定制;交互方面提供...

    字符串 window.open() window.opener window.name window对象等的总结

    2个页面,加了注释,很清晰。

    react-new-window:using使用`window.open`在React中弹出新窗口

    受到( 启发。 特征 仅2.68KB (已压缩!)。 支持完整的window.open api 。... 装入<NewWindow>将打开一个弹出窗口。 卸载后,弹出窗口将关闭。 children内容将呈现到新的弹出窗口中。 在这种情况下, Hi

    Unity3D教程:GUILayout.Window和GUI.Window的区别1

    Unity3D教程:GUILayout.Window和GUI.Window的区别 Posted on 2013年02月07日 by U3d / Unity3D

    点心美化版通讯录

    美化图标.优化类.点心通讯录.别代码:... <uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" /> <uses-permission android:name="android.permission.PROCESS_OUTGOING_CALLS" /

    window.name解决跨域数据传输问题

    原文:http://research.microsoft.com/~helenw/papers/subspace.pdfwindow.name 传输技术,原本是 Thomas Frank 用于解决 cookie 的一些劣势(每个域名 4 x 20 Kb 的限制、数据只能是字符串、设置和...《Session variab

Global site tag (gtag.js) - Google Analytics