首页 新闻 会员 周边

session的替代方案,大家来看下

0
悬赏园豆:20 [已解决问题] 解决于 2010-08-21 09:41

面临的问题:

1.由于现代浏览器的标签页共享session,如果需要同时在单个浏览器中允许多个用户登录,会出现很多棘手的问题;

2.另外项目中出现过在标准浏览器的iframe页中访问ashx文件时session为空的问题;

3.再者现在使用的session是基于cookie,你不能100%的保证session的内容不会超过大小.

所以现在想用cache来代替session,因为入口点只有一个,可以在登录时生成一个GUID的KEY,然后追加到URL中,再写一个方法方便存储和获取用户信息到Cache[guid]中,这样上面的几个问题都可以很方便的解决。

另外如果系统随着客户的需求出现变更,比如多个用户在一个浏览器中同时登录的是与否,或者多浏览器共用登录信息的是与否,这些通过加入自定义配置结合cache和cookie都可以很方便的解决。另外结合cache的callback还可以解决非inproc方式的session没有sessionEnd事件。

不好的一点就是页面地址都要附加一个url的querystring,不是很美观。不过现在系统决定用iframe代替masterpage所以这个应该不算什么大问题。

现在主要觉得使用cache特别的方便自定义配置,session虽然方式很多,但是每一种始终收到各种约束。

大家来说说这个方法有什么明显的缺点,比如效率/性能/以及开发者易用性上。

问题补充: asp.net提供的基于url的session暂不考虑,所以大家不要拿我这种方式与其比较。只需要比较基于cookie,数据库与我这种方式的优缺点。
高凡凡高的主页 高凡凡高 | 初学一级 | 园豆:95
提问于:2010-08-21 00:04
< >
分享
最佳答案
0

我之前做了个项目、比你说的情况还要严格些、是要求限制一台电脑只能同时登录一个用户,不限制浏览器,我也是采用 自定义缓存+数据库 的方式来处理,session 限制太多,不能满足要求。

收获园豆:10
HUHU慈悲 | 大侠五级 |园豆:9973 | 2010-08-21 01:59
看来你已经这么做了呵呵。
高凡凡高 | 园豆:95 (初学一级) | 2010-08-21 09:41
其他回答(1)
0

你的想法已经不错了,根据你网站的定位,大部分用户访问量比较大的网站,都选择cookie以减小对服务器的压力。

session和cache都是保存在服务器内存中的,这样如果访问量很大,或者IIS出问题,都有可能导致登陆信息或其它信息丢失。用户都已经习惯了在浏览器中保存用户登陆状态,那怕是个标识,但是你服务器那边要做双重验证,防止欺骗登陆。

结合使用cookie和缓存,或者数据库。

如果管理型系统,选择session也不错,出问题出有解决的办法,也可以把状态保持到数据库。

收获园豆:10
Astar | 园豆:40805 (高人七级) | 2010-08-21 09:28
确实,不过我们系统使用人数不多。cache/cookie/数据库/url结合起来防止欺骗登录,目前还在构思。兄弟有什么经验还请传授~
支持(0) 反对(0) 高凡凡高 | 园豆:95 (初学一级) | 2010-08-21 09:43
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册