emu in blogjava

            BlogJava :: 首頁 :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理 ::
            171 隨筆 :: 103 文章 :: 1052 評論 :: 2 Trackbacks
          很多時候我們做web開發(fā)往cookie里面存數(shù)據(jù),只是為了在不同的網(wǎng)頁之間跳轉(zhuǎn)的時候可以共享數(shù)據(jù),但是cookie里面的每個數(shù)據(jù)不管是否需要都會在每個同域的http請求中被發(fā)送往服務(wù)器,包括每個頁面、圖片、css、腳本或者ajax的的請求,這就無形中占用了多余的帶寬。更糟糕的是,一個網(wǎng)頁的cookie本來也只有有限的4k空間,一旦不小心寫入的cookie超過了限制,就會造成原來有用的cookie丟失,這樣造成的bug非常難以追查。

          因此我們在IE下面經(jīng)常使用userdata來保存共享數(shù)據(jù)。但是在firefox下面卻一直缺乏對應(yīng)的特性。

          今天在看firefox 2.0的?的時候,驚奇的發(fā)現(xiàn)一個新特性叫做:
          Support for
          client-side session and persistent storage
          趕緊試驗了一下,firefox2.0果然支持這個特性了。雖然還只能在session生命周期內(nèi)使用(而不像ie的userdata可以指定有效時間),但是總算解決了cookie占用的問題了。

          以前曾經(jīng)寫過一個只支持ie的userdata管理器,現(xiàn)在可以升級了:

          <!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(
          "當(dāng)前瀏覽器不支持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(
          "當(dāng)前瀏覽器不支持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(
          "當(dāng)前瀏覽器不支持userdata或者sessionStorage特性")
          ????}
          }?

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

          這個特性不能在本地網(wǎng)頁上試驗,必須把頁面用某個服務(wù)器(apache或者iis都可以)發(fā)布后用firefox訪問。
          posted on 2006-10-04 15:13 emu 閱讀(9202) 評論(20)  編輯  收藏

          評論

          # re: 終于盼到了,firefox支持sessionStorage了 2006-10-04 19:08 pear
          原來還有 userdata這個東東,算是長見識了。不說還不知道IE有這個東西。

          問下樓主,你一般用userdata保存些什么東西??  回復(fù)  更多評論
            

          # re: 終于盼到了,firefox支持sessionStorage了 2006-10-04 20:34 冰川
          不管啦,支持!  回復(fù)  更多評論
            

          # re: 終于盼到了,firefox支持sessionStorage了 2006-10-04 21:02 emu
          @pear
          userdata可以在客戶端保存多達(dá)64k的數(shù)據(jù),可以用來保存用戶信息、操作歷史、購物車,各種各樣的數(shù)據(jù)。在關(guān)掉瀏覽器后下次在此訪問此網(wǎng)頁的時候仍可以訪問。  回復(fù)  更多評論
            

          # re: 終于盼到了,firefox支持sessionStorage了 2006-10-05 19:21 Alex
          userdata真是好東西 :)  回復(fù)  更多評論
            

          # re: 終于盼到了,firefox支持sessionStorage了 2006-10-07 00:18 葉子
          opera下有點問題  回復(fù)  更多評論
            

          # re: 終于盼到了,firefox支持sessionStorage了 2006-10-13 17:06 Flyingis
          一般的網(wǎng)上購物網(wǎng)站都有類似userdata這個功能,比如新蛋、amazon等。

          但是我發(fā)現(xiàn)在新蛋www.newegg.com.cn網(wǎng)站,使用Firefox 1.5.0.7在不注冊情況下同樣可以保存我的瀏覽記錄,不知道這是怎么實現(xiàn)的?  回復(fù)  更多評論
            

          # re: 終于盼到了,firefox支持sessionStorage了 2006-10-14 17:16 emu
          新蛋的做法不是太有技術(shù)含量了。關(guān)鍵就在它寫的 NeweggCookie 里面。每把一樣?xùn)|西放進(jìn)購物車,NeweggCookie就會長一截(在&符號前面一段會增長)。這個懂一點點web開發(fā)的都會了。  回復(fù)  更多評論
            

          # re: 終于盼到了,firefox支持sessionStorage了 2006-10-17 15:58 Flyingis
          @emu
          慚愧啊,自己的確沒有用到過。  回復(fù)  更多評論
            

          # ff 2.0的最新 release notes 2006-10-24 13:27 firefox
          http://en-us.www.mozilla.com/en-US/firefox/2.0/releasenotes/  回復(fù)  更多評論
            

          # re: 終于盼到了,firefox支持sessionStorage了 2007-06-25 18:16 TX同學(xué)
          用了這個東西在用戶刷新時保存數(shù)據(jù),但是不知道怎么設(shè)置讓IE在關(guān)閉瀏覽器后失效,能說明一下么?  回復(fù)  更多評論
            

          # re: 終于盼到了,firefox支持sessionStorage了 2007-06-27 11:22 emu
          一般我都是設(shè)置一個臨時cookie來監(jiān)視ie關(guān)閉。在下次打開的時候如果監(jiān)測不到cookie就清空數(shù)據(jù),再重設(shè)上cookie。  回復(fù)  更多評論
            

          # re: 終于盼到了,firefox支持sessionStorage了[未登錄] 2007-06-28 10:33 andrew
          謝謝stone  回復(fù)  更多評論
            

          # re: 終于盼到了,firefox支持sessionStorage了 2007-07-27 17:53 瀟灑
          哈哈…… 我也是以前寫了個只支持IE的cache類,現(xiàn)在想支持 FF ……
          一下就google到emu老大你的窩了…… 謝了!~  回復(fù)  更多評論
            

          # re: 終于盼到了,firefox支持sessionStorage了 2008-01-09 09:41 在線代理
          這個太強了,一定要訂購大大的rss。
          學(xué)習(xí)了userdata。  回復(fù)  更多評論
            

          # re: 終于盼到了,firefox支持sessionStorage了[未登錄] 2008-04-15 16:29 阿福
          在FF在關(guān)閉下重新打開,數(shù)據(jù)還是會丟失,在IE下倒不錯  回復(fù)  更多評論
            

          # re: 終于盼到了,firefox支持sessionStorage了[未登錄] 2008-05-03 10:17 閑耘
          學(xué)習(xí),支持。  回復(fù)  更多評論
            

          # re: 終于盼到了,firefox支持sessionStorage了 2009-02-26 16:38 小蔡
          長見識了  回復(fù)  更多評論
            

          # re: 終于盼到了,firefox支持sessionStorage了[未登錄] 2009-10-07 10:54 Robin
          如果僅僅為了session范圍的數(shù)據(jù),還不如用服務(wù)器端程序的session存儲,省下不少問題~
          電子商務(wù)的站點都是這么實現(xiàn)購物車的吧~  回復(fù)  更多評論
            

          # re: 終于盼到了,firefox支持sessionStorage了 2009-10-12 09:24 emu
          @Robin
          呵呵,是省不少問題,但是多出來的不少問題和成本要等你做大系統(tǒng)的時候才會看到了  回復(fù)  更多評論
            

          # re: 終于盼到了,firefox支持sessionStorage了 2009-12-29 23:14 jacklau
          stone,那sessionStorage是存儲在哪里的呢?內(nèi)存?  回復(fù)  更多評論
            


          只有注冊用戶登錄后才能發(fā)表評論。


          網(wǎng)站導(dǎo)航:
           
          主站蜘蛛池模板: 灌南县| 都匀市| 苍梧县| 江达县| 太原市| 集贤县| 满洲里市| 德令哈市| 沾益县| 砚山县| 南川市| 大兴区| 稷山县| 淳安县| 孝义市| 镇宁| 海宁市| 会昌县| 南康市| 曲阜市| 中牟县| 双峰县| 沙湾县| 万荣县| 隆德县| 海兴县| 于都县| 四子王旗| 辽源市| 华阴市| 吐鲁番市| 苏尼特左旗| 呈贡县| 利川市| 象山县| 临洮县| 湖口县| 大安市| 玉溪市| 资阳市| 香格里拉县|