emu in blogjava

  BlogJava :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理 ::
  171 随笔 :: 103 文章 :: 1052 评论 :: 2 Trackbacks
很多时候我们做web开发往cookie里面存数据,只是为了在不同的网页之间跳转的时候可以共享数据,但是cookie里面的每个数据不管是否需要都会在每个同域的http请求中被发送往服务器,包括每个页面、图片、css、脚本或者ajax的的请求,这就无形中占用了多余的带宽。更糟糕的是,一个网页的cookie本来也只有有限的4k空间,一旦不小心写入的cookie超过了限制,就会造成原来有用的cookie丢失,这样造成的bug非常难以追查。

因此我们在IE下面经常使用userdata来保存共享数据。但是在firefox下面却一直缺乏对应的特性。

今天在看firefox 2.0的what's new 的时候,惊奇的发现一个新特性叫做:
Support for client-side session and persistent storage
赶紧试验了一下,firefox2.0果然支持这个特性了。虽然还只能在session生命周期内使用(而不像ie的userdata可以指定有效时间),但是总算解决了cookie占用的问题了。

以前曾经写过一个只支持ie的userdata管理器,现在可以升级了:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML>
<HEAD>
<TITLE> UserData manager </TITLE>
<META NAME="Generator" CONTENT="EditPlus">
<META NAME="Author" CONTENT="emu">
<META NAME="Keywords" CONTENT="IE USER DATA manager">
<META NAME="Description" CONTENT="UserData manager">
</HEAD>
<BODY>
<SCRIPT LANGUAGE="JavaScript">
<!--
var isIE = !!document.all;
if(isIE)
document.documentElement.addBehavior(
"#default#userdata");
function  saveUserData(key, value){
    
var ex; 
    
if(isIE){
        
with(document.documentElement)try {
            load(key);
            setAttribute(
"value", value);
            save(key);
            
return  getAttribute("value");
        }
catch (ex){
            alert(ex.message)
        }
    }
else if(window.sessionStorage){//for firefox 2.0+
        try{
            sessionStorage.setItem(key,value)
        }
catch (ex){
            alert(ex);
        }
    }
else{
        alert(
"当前浏览器不支持userdata或者sessionStorage特性")
    }
}

function loadUserData(key){
    
var ex; 
    
if(isIE){
        
with(document.documentElement)try{
            load(key);
            
return getAttribute("value");
        }
catch (ex){
            alert(ex.message);
return null;
        }
    }
else if(window.sessionStorage){//for firefox 2.0+
        try{
            
return sessionStorage.getItem(key)
        }
catch (ex){
            alert(ex)
        }
    }
else{
        alert(
"当前浏览器不支持userdata或者sessionStorage特性")
    }
}
function  deleteUserData(key){
    
var ex; 
    
if(isIE){
        
with(document.documentElement)try{
            load(key);
            expires 
= new Date(315532799000).toUTCString();
            save(key);
        }
        
catch (ex){
            alert(ex.message);
        }
    }
else if(window.sessionStorage){//for firefox 2.0+
        try{
            sessionStorage.removeItem(key)
        }
catch (ex){
            alert(ex)
        }
    }
else{
        alert(
"当前浏览器不支持userdata或者sessionStorage特性")
    }


saveUserData(
"emu","hello world !")
alert(loadUserData(
"emu"))
deleteUserData(
"emu")
alert(loadUserData(
"emu"))
//-->
</SCRIPT>
</BODY>
</HTML>

这个特性不能在本地网页上试验,必须把页面用某个服务器(apache或者iis都可以)发布后用firefox访问。
posted on 2006-10-04 15:13 emu 阅读(9176) 评论(20)  编辑  收藏

评论

# re: 终于盼到了,firefox支持sessionStorage了 2006-10-04 19:08 pear
原来还有 userdata这个东东,算是长见识了。不说还不知道IE有这个东西。

问下楼主,你一般用userdata保存些什么东西??  回复  更多评论
  

# re: 终于盼到了,firefox支持sessionStorage了 2006-10-04 20:34 冰川
不管啦,支持!  回复  更多评论
  

# re: 终于盼到了,firefox支持sessionStorage了 2006-10-04 21:02 emu
@pear
userdata可以在客户端保存多达64k的数据,可以用来保存用户信息、操作历史、购物车,各种各样的数据。在关掉浏览器后下次在此访问此网页的时候仍可以访问。  回复  更多评论
  

# re: 终于盼到了,firefox支持sessionStorage了 2006-10-05 19:21 Alex
userdata真是好东西 :)  回复  更多评论
  

# re: 终于盼到了,firefox支持sessionStorage了 2006-10-07 00:18 叶子
opera下有点问题  回复  更多评论
  

# re: 终于盼到了,firefox支持sessionStorage了 2006-10-13 17:06 Flyingis
一般的网上购物网站都有类似userdata这个功能,比如新蛋、amazon等。

但是我发现在新蛋www.newegg.com.cn网站,使用Firefox 1.5.0.7在不注册情况下同样可以保存我的浏览记录,不知道这是怎么实现的?  回复  更多评论
  

# re: 终于盼到了,firefox支持sessionStorage了 2006-10-14 17:16 emu
新蛋的做法不是太有技术含量了。关键就在它写的 NeweggCookie 里面。每把一样东西放进购物车,NeweggCookie就会长一截(在&符号前面一段会增长)。这个懂一点点web开发的都会了。  回复  更多评论
  

# re: 终于盼到了,firefox支持sessionStorage了 2006-10-17 15:58 Flyingis
@emu
惭愧啊,自己的确没有用到过。  回复  更多评论
  

# ff 2.0的最新 release notes 2006-10-24 13:27 firefox
http://en-us.www.mozilla.com/en-US/firefox/2.0/releasenotes/  回复  更多评论
  

# re: 终于盼到了,firefox支持sessionStorage了 2007-06-25 18:16 TX同学
用了这个东西在用户刷新时保存数据,但是不知道怎么设置让IE在关闭浏览器后失效,能说明一下么?  回复  更多评论
  

# re: 终于盼到了,firefox支持sessionStorage了 2007-06-27 11:22 emu
一般我都是设置一个临时cookie来监视ie关闭。在下次打开的时候如果监测不到cookie就清空数据,再重设上cookie。  回复  更多评论
  

# re: 终于盼到了,firefox支持sessionStorage了[未登录] 2007-06-28 10:33 andrew
谢谢stone  回复  更多评论
  

# re: 终于盼到了,firefox支持sessionStorage了 2007-07-27 17:53 潇洒
哈哈…… 我也是以前写了个只支持IE的cache类,现在想支持 FF ……
一下就google到emu老大你的窝了…… 谢了!~  回复  更多评论
  

# re: 终于盼到了,firefox支持sessionStorage了 2008-01-09 09:41 在线代理
这个太强了,一定要订购大大的rss。
学习了userdata。  回复  更多评论
  

# re: 终于盼到了,firefox支持sessionStorage了[未登录] 2008-04-15 16:29 阿福
在FF在关闭下重新打开,数据还是会丢失,在IE下倒不错  回复  更多评论
  

# re: 终于盼到了,firefox支持sessionStorage了[未登录] 2008-05-03 10:17 闲耘
学习,支持。  回复  更多评论
  

# re: 终于盼到了,firefox支持sessionStorage了 2009-02-26 16:38 小蔡
长见识了  回复  更多评论
  

# re: 终于盼到了,firefox支持sessionStorage了[未登录] 2009-10-07 10:54 Robin
如果仅仅为了session范围的数据,还不如用服务器端程序的session存储,省下不少问题~
电子商务的站点都是这么实现购物车的吧~  回复  更多评论
  

# re: 终于盼到了,firefox支持sessionStorage了 2009-10-12 09:24 emu
@Robin
呵呵,是省不少问题,但是多出来的不少问题和成本要等你做大系统的时候才会看到了  回复  更多评论
  

# re: 终于盼到了,firefox支持sessionStorage了 2009-12-29 23:14 jacklau
stone,那sessionStorage是存储在哪里的呢?内存?  回复  更多评论
  


只有注册用户登录后才能发表评论。


网站导航: