Flash Cookie【使用Flash Cookie技术在客户端永久保存HTTP Cooki
前言: 一、什么是Flash Cookie? 二、使用Flash Cookie永久存储HTTP Cookie流程 三、ActionScript实现: /** * Package laohan.flashcookie * Author:handaoliang * Create Date:2009.11.03 * Last Mofied Date:2009.11.03 * CopyRights:Handaoliang.com All Rights Reserved. **/ package laohan.flashcookie { //注:由于我没有装Flex,所以只好使用Flash CS3来嵌入。 //如果使用Flash Developer,则MovieClip这个包可以不包含。 import flash.display.MovieClip; import flash.net.SharedObject; import flash.external.ExternalInterface; public class myFlashCookie extends MovieClip {//如果使用Flex,可以不继承这个类。 private var cookieTimeOut:uint; private var cookieName:String; private var cookieSharedObj:SharedObject; private var currentCookie:Object; private var cookieValue:String; //构造函数。 public function myFlashCookie(cName:String = "handaoliang",timeOut:uint=3600) { cookieName = cName; cookieTimeOut = timeOut; cookieSharedObj = SharedObject.getLocal(cName,"/" ); if(isCookieExist(cName)){//如果FlashCookies存在。 currentCookie = getCookies(cName); //调用JavaScript里的jsSetCookies方法来设置HTTPCookie ExternalInterface.call("jsSetCookies",{fcookie:currentCookie}); //trace(currentCookie); } } //到期删除Cookies public function clearTimeOut():void { var obj:* = cookieSharedObj.data.cookie; if(obj == undefined){ return; } for(var key in obj){ if(obj[key] == undefined || obj[key].time == undefined || isTimeOut(obj[key].time)){ delete obj[key]; } } cookieSharedObj.data.cookie = obj; cookieSharedObj.flush(); } //添加Cookies( key-value ) public function saveCookies(key:String,value:*):void { var today:Date = new Date(); key = "key_"+key; value.time = today.getTime(); if(cookieSharedObj.data.cookie == undefined){ var obj:Object = {}; obj[key] = value; cookieSharedObj.data.cookie = obj; }else{ cookieSharedObj.data.cookie[key] = value; } cookieSharedObj.flush(); } //删除当前Cookies public function removeCookies(key:String):void { if (isCookieExist(key)) { delete cookieSharedObj.data.cookie["key_" + key]; cookieSharedObj.flush(); } } //通过Key来获取Cookies值。 public function getCookies(key:String):Object{ return isCookieExist(key)?cookieSharedObj.data.cookie["key_"+key]:null; } //检查Cookies是否存在。 public function isCookieExist(key:String):Boolean{ key = "key_" + key; return cookieSharedObj.data.cookie != undefined && cookieSharedObj.data.cookie[key] != undefined; } //检查Cookies的到期时间 private function isTimeOut(time:uint):Boolean { var today:Date = new Date(); return time + cookieTimeOut * 1000 < today.getTime(); } //取得Cookies的到期时间; public function getTimeOut():uint { return cookieTimeOut; } //取得Cookies名称。 public function getName():String { return cookieName; } //清除所有的Cookies值。 public function clearCookies():void { cookieSharedObj.clear(); } } }
四、JavaScript的实现: //先定义一个全局变量 var flashCookiesValue = Null; var jsSetCookies = function(flahCookieValue){ var o = arguments[0]; flashCookiesValue = o.fcookie;//在SWF执行时传递过来的值。 document.cookie="handaoliang="+flashCookiesValue+";path=/;expires=Fri,04-Dec-2009 08:44:07 GMT;domain=handaoliang.com"; }; ?2)检查特定的HTTPCookies是否存在,如果不存在,则在页面上生成Object Dom节点,把hdl.swf加载进来。此时SWF会去检查Flash Cookies是否存在,如果存在,则去取得Flash Cookies,并且通过调用jsSetCookies来设置HTTP Cookies: if(document.cookie.indexOf("handaoliang=")<0){ //先去load hdl.swf,即在页面上生成Object对象: var jsLoadFlash = function(){ var myFlashURL = "hdl.swf"; var myFlashObj = document.createElement("object"); myFlashObj.setAttribute("id","myFlash"); myFlashObj.setAttribute("classid","clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"); myFlashObj.setAttribute("width",0); myFlashObj.setAttribute("height",0); var flahParamObj = document.createElement("param"); flahParamObj.setAttribute("name","movie"); flahParamObj.setAttribute("value",myFlashURL); var subMyFlashObj = document.createElement("object"); subMyFlashObj.setAttribute("type","application/x-shockwave-flash"); subMyFlashObj.setAttribute("data",myFlashURL); subMyFlashObj.setAttribute("width",0); subMyFlashObj.setAttribute("height",0); myFlashObj.appendChild(flahParamObj); myFlashObj.appendChild(subMyFlashObj); var myDHTMLBody = document.body; if(myDHTMLBody){ myDHTMLBody.appendChild(myFlashObj); } }; jsLoadFlash(); } 倘若Flash Cookies里也没有存储我们想要的数据呢?那么,此时就必须通过JS去请求特定的URL,然后使用JavaScript去调用AS3的方法来设置Flash Cookies吧。关于这一步,就由大家自己去实现吧。呵呵。 五、结语: --EOF-- ? 原文地址:http://www.handaoliang.com/article_tag/flash-cookie (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- iphone – 设置AVCaptureTorchModeOn
- [沫沫金原创]Oracle去除Date时分秒 不用to_char然后再to_da
- c – 乘法继承类的复制构造函数
- ruby-on-rails – Ruby on Rails设计Oauth-facebook OmniAu
- XML 元素 http://blog.csdn.net/chaiyu2002/article/detail
- postgresql存储引擎源码分析三
- activiti xml String方式部署
- 像flickr一样多选图片一次上传
- c# – 使用Oracle Zero Date
- Ehcache 中ehcache.xml 配置详解和示例