言士_心

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

今天参加了Adobe after MAX中国站,收益匪浅。了解到了几点比较重要的信息:

1、Adobe加大了对HTML5的投入,Adobe Edge(一款IDE,类似于AE,可以像制作Flash动画一样制作基于HTML5的动画)就是明证。

2、Flex可能要被Adobe抛弃,捐赠给Apache软件基金会。(Flex的性能的确让我很纠结)

3、Adobe2012年在3D游戏方面会有非常大的动作(可能是Mohill2 or something else),他的目标是:霸占浏览器Game,让开发者使用Adobe的东东来开发浏览器游戏。

 

听了一天的讲座,头都有点儿大了,散场叫调查卷给了一个pad包(难不成你还想要pad啊),印有Adobe的标识,呵呵,没白来,回头我买个PAD把它充实一下 :)

 

我们项目中使用的 Flex + BlazeDS + JAVA的模式。对于用户登录有一下一下几条限制:

1、同一浏览器、同一时刻只能有一个用户登录。

2、使用同一浏览器,较晚登录的用户会踢出较早登录的用户。

      当用户登录时,后台从FlexContext中得到FlexSession(HttpSession),首先查看后台有没有相应的session记录,有的话,给相应用户推送消息使其退出,然后将SessionId和当前登录用户绑定,为了单独控制用户的超时事件,设置的httpSession永不超时,然后通过计时器来判断登录用户是否已经超时,当超时后,给前台用户推送超时消息,前台相应用户接收消息后,退出到登录页面。现在问题出现了,大家知道,IE&FF在session有效期内访问同一站点是使用的sessionId相同,当A用户登录系统成功后,B系统打开一个浏览器Tab页也登录,因为后台不允许两个用户占用同一个session,所以后台给前台发消息要A退出到登录页面,但是由于某种原因,发送消息失败,A并没有接收到消息,后台也没有验证A是否接收到消息,然后就把当前sessionId和B用户绑定了。这时,在前台的现象就是,A和B用同一浏览器登录上了系统,同时在线,且由于A、B用户session相同,A请求后台的回来的数据都变成B的了,导致数据混乱。

后来用ShareObject+LocalConnection解决了这个问题,方案为:

1、当一个用户登录成功后,启动一个随机名称比如:nameA的LocalConnection。然后将nameA写入一个以当前sessionId为key的SharedObject中。

2、当另一个用户用统一sessionId登录时,首先会从以当前sessionId为key的SharedObject中取出已经存在的LocalConnection名字,然后调用其方法使其退出,然后执行第一步。

这样就保证了同一时刻、同一浏览器只有一个用户登录。

posted on 2011-12-01 22:08  言士_心  阅读(1093)  评论(0编辑  收藏  举报