面临的问题:
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虽然方式很多,但是每一种始终收到各种约束。
大家来说说这个方法有什么明显的缺点,比如效率/性能/以及开发者易用性上。
我之前做了个项目、比你说的情况还要严格些、是要求限制一台电脑只能同时登录一个用户,不限制浏览器,我也是采用 自定义缓存+数据库 的方式来处理,session 限制太多,不能满足要求。
你的想法已经不错了,根据你网站的定位,大部分用户访问量比较大的网站,都选择cookie以减小对服务器的压力。
session和cache都是保存在服务器内存中的,这样如果访问量很大,或者IIS出问题,都有可能导致登陆信息或其它信息丢失。用户都已经习惯了在浏览器中保存用户登陆状态,那怕是个标识,但是你服务器那边要做双重验证,防止欺骗登陆。
结合使用cookie和缓存,或者数据库。
如果管理型系统,选择session也不错,出问题出有解决的办法,也可以把状态保持到数据库。