2011-03-07 63 views
0

我希望也许有人可以提供一些有关问题的见解,我正在艰难的时间决定如何解决。将变量从闪存传递到HTML/php

我有一个相当简单的Flash应用程序,用户可以在连接时创建一个快速的用户名,并且用户名是在flash swf中创建的。

现在,我有一个cron作业,每隔10分钟删除不活动的用户名(在我的mysql数据库中,这些用户名全部由其他人在线存储和访问),这很好。但是如果一堆人立即签字,它仍然会变得混乱起来,在cron作业清除之前还有10分钟的时间。

用户可以选择在Flash应用程序中单击注销,这很好,并且效果很好。当然,很多人选择不点击注销,只需点击浏览器x即可。

我已经查看了onbeforeunload和jquery的.unload,但我仍然需要一种方法来获取用户名变量,它是IN flash中的HTML,然后使用php脚本运行删除用户名mysql查询。

有没有更简单的解决方案?

如果没有,我可能会将用户名变量传递给html,以便在用户输入用户名后保留它,以便与运行php脚本的.unload函数有关?

编辑:::::也许有一种方法来创建一个唯一的数字字符串与PHP然后通过该变量的闪存包括与MySQL行然后,因为我已经有该变种,因为它是在HTML上创建一边,随着卸载,它删除具有该唯一ID的行吗?

如果任何事情这个想法是最好的办法,如果我用md5(uniqid(microtime())。$ _SERVER ['REMOTE_ADDR']。$ _SERVER ['HTTP_USER_AGENT']) iD我怎么能把结果存储在一个变种,我可以放在闪存变量的参数,然后再次在jQuery的卸载或javascript onbeforeunload,如果这样会更好。我只是更熟悉jquery

+0

使用ExternalInterface从Flash调用JavaScript方法[反之亦然]。我不清楚这是否能解决您的问题。 – JeffryHouser 2011-03-07 21:29:07

回答

1

实际上,您可以调用ExternalInterface命令来填充来自SWF组件的HTML中的隐藏字段。

if (ExternalInterface.available) 
{ 
    var js:String = "yourJavaScriptFunction"; 
    var valToPass:String; 
    ExternalInterface.call(js(valToPass)); 
} 

而在HTML页面中,你写了一个JavaScript函数:

<script language="javascript" type="text/javascript"> 
function yourJavaScriptFunction(valToPass) 
{ 
    document.getElementById('yourHiddenField').value = valToPass; 
} 

而且从卸载事件发射了你的页面,你可以访问这是从SWF文件传递的值。

请注意,只要获得用户的登录凭据,就可以从SWF调用JavaScript函数。

希望这会有所帮助。

+0

我认为外部接口正是我所需要的!我有它的工作!谢谢!直到现在还不知道它。 – brybam 2011-03-07 23:03:00

0

你想要使用URLRequest,URLVariablesURLLoader这样做的组合。见下面。

var myData:URLRequest = new URLRequest("some.php"); 
myData.method = URLRequestMethod.POST; 

var variables:URLVariables = new URLVariables(); 
variables.username = 'CREATED USERNAME'; 

myData.data = variables; 

var loader:URLLoader = new URLLoader(); 
loader.dataFormat = URLLoaderDataFormat.VARIABLES; 
loader.addEventListener(Event.COMPLETE, dataOnLoad); 
loader.load(myData); 

function dataOnLoad(evt:Event){ 
    trace('Completed'); 
} 

然后,这会调用'some.php'文件,并将您的用户名存储在'$ _POST ['username']'中。然后你的PHP脚本就可以在将该用户名连接到该会话的数据库上留下印象(不过你想这样做)。

+0

你提出sessios这个词,让我觉得...也许我应该只是在页面加载时创建一个sessionid,也许使用类似md5(uniqid(microtime()))。$ _SERVER ['REMOTE_ADDR']。$ _SERVER ['HTTP_USER_AGENT'])然后我可以加载该变量到flash当用户名被添加到数据库...然后我有HTML端的sessionID,因为它是在那里创建....只是用它来引用哪一行删除与我的jquery .unload函数的mysql – brybam 2011-03-07 22:01:21

+0

你绝对可以做到这一点。不过,我建议您更改系统,以便服务器生成用户名而不是闪存。你可以调用一个php脚本(使用上面的)。该脚本可以将您提到的会话信息放在一起,在数据库中为该用户名和会话插入一条记录,然后将该uid返回到您的Flash应用程序。 – 2011-03-07 22:29:43