日期:2014-05-18  浏览次数:20455 次

[100],“有关 Session 操作的几个误区 ”,有一处不懂,请高手进来看看,明白后立即结贴。


在网上看到“有关   Session   操作的几个误区”一文,如下
1.   this.Session[ "username "]   =   null

HttpSessionState   内部使用   NameObjectCollection   类型的集合对象来存储用户数据。因此使用   this.Session[ "username "]   =   null   仅仅是将该元素的值设为   null   而已,并没有真的将其从   Session   中移除。(为什么?晕~~~   建议看看   C#   基础方面的书。)

正确的方法是:this.Session.Remove( "username ");
删除全部数据:this.Session.RemoveAll();   或   this.Session.Clear();

2.   this.Session.Abandon()

该方法会导致当前   Session   被取消,系统会触发   Global.asax   中的   Session_End   事件(仅限于   Mode   =   InProc   时)。
尽管再次发出请求时   SessionID   (可能)没有发生变化,但是你会发现   Global.asax   Session_Start   事件被触发。你还可以使用   this.Session.IsNewSession   属性来判断当前   Session   是否重新创建的。

由于某些组件和控件可能要使用   Session   信息(如使用   this.Session.SyncRoot   进行同步),因此不要轻易使用该方法清理   Session。

3.   用户身份验证

不要使用   this.Session[ "username "]   =   "ZhangSan "   、if   (this.Session[ "username "]   !=   null)   这样的方式进行用户身份验证,这种方式既不安全也不合理。有关身份验证请参考   MSDN   文档或雨痕写的相关文章。  

前两点我同意,但是第三点,我就不懂了,不都是这么用的吗,有什么不好呢???又去查雨痕{根本没有找到他的任何链接}MSDN,没有查到相关文章。

请高手讲讲或给个地址,让我明白明白,明白完立即给分。

------解决方案--------------------
没觉得用session存用户信息有什么不安全和不合理的呀
只是我个人不太喜欢用session
1.因为session是不可靠的,内存压力过大时,系统会回收资源,造成session丢失
2.而且session是面向全局的,这意味着任何时候所有的项目成员都可以有意无意的存取它
3.Session[ "username "] = "ZhangSan " 这样的写法我也不太喜欢,打错字了怎么办?
------解决方案--------------------
个人现在用Session较少
------解决方案--------------------
Session 只存一些不是很重要的数据。
对于用户状态,我宁可用cookie + 加密

------解决方案--------------------
估计他原文的意思是不要使用session来做身份验证,因为session是不可靠,
而且可以被本地劫持被分析的,而不是让你不要“这么用”session来验证。

作者的意思估计是让你使用form验证,passport验证之类的。
------解决方案--------------------
在网上看到这段文字,不知道有没有人研究过,还有请问谁有比较好的解决方案,关注中......

在编写程序的时候某些程序员粗心地将管理员权限字段名与会员权限字段名设置相同,比喻都是:Session( "UserKey ")= *** ,在这里,如果是有备而来的黑客,相信大家知道会有什么结果,不需要用户名和密码就可以直接访问后台的;

再则,Session 好象是针对 IP 的,就是说,如果一个服务器上有两个网站程序,其中的权限 Session 相同,那么是可以相互访问后台的!~

------解决方案--------------------
照第三点那样写 有可能会有用户重复登陆 还有session过期失效的问题吧。。
------解决方案--------------------
Session占用内存,如果服务器访问量大的话,一方面增加服务器负担,另一方面,内存数据可能丢失,也就是说session可能丢失session针对应用程序,不同的程序员可能命名同一个Session[ "name "]值,造成的结果大家也知道。建议尽量少用session,不是不用,session用起来毕竟很方便、
------解决方案--------------------
接分