Session集合中的数据不但会“超时”,而且会提前“丢失”。超时了本来就应该判定为离线,实际上判断用户登录与否应该在20秒到一分钟只能判断出来,而不能等待用于已经关闭浏览器或者切换到其它网站你超过20分钟之后才反应出来。关于Session在管理比较严格的web服务器上会自动“丢失”信息的解释太多太多了,懒得重复了。主要是两种办法:如果你拥有web服务器,启用状态服务器而不是继续使用InProc方式管理应用程序状态;如果你不肯定拥有web服务器,那么应该提早放弃使用Session集合,你的程序中的状态数据使用自定义的会话数据库,例如使用Linq to XML将数据保存在服务器磁盘文件中(以SessionID作为文件名),这样即使服务器重新开机启动客户端也感觉不到异常,因此没有“丢失”的困扰。关于迅速感应用户登录、离线状态,也可以google到很多资料。关键是知道需要满足什么样的测试条件的答案,剔除错误的方案。
如果是为了一个帐号同时只有一个人在用.就用后者踢前者的方式.用户登陆以后,在数据库里记录登陆状态和一个身份票.(SESSIONID就可以),用户每次操作都用身份票来验证,后面的用户登陆的时候更新了身份票,前面用户的身份票就失效了.后面的用户就成了合法用户.
1. Google一下单点登陆
2. 2楼的第二种方法是比较通用的做法
太....慢.....
最通俗的讲发:
用户A登陆.假设sessionid为12345,12345就是钥匙.记录到数据库.用户A以后每个操作,都去匹配一下看钥匙对得上不.
用户B于用户A以后登陆,假设sessionid为12346,12346记录到数据,那么用户A的要是就失效了.用户B就取代了用户A成为了唯一的合法用户.用户A就被踢掉了...
以前前程无忧就是这么做的.
任何保存在进程以外的数据都应该同时保存在Cache中。读取数据也是首先读取Cache,当发现数据已经丢失时才读取外存的。