积极答复者
在自定义模块(实现IHttpModule接口)使用HashTable存储,那么HashTable中的数据是每个访问者都可以得到吗?

问题
答案
-
应该是这么回事.
因为HttpModule这个类的对象是有ASP.NET这个体系的核心来创建的,
这属于底层了.
问题在于你ASP.NET底层如何创建的HttpModule这个类的对象.
被创建的对象是Private的还是Public的.
被创建的对象如何引用.
这些都是个问题.
Session的数据是因为给附加到当前的HttpContent里去了.
其实Session是可以像Application那样的.
只是被隐藏的底层代码,然后又能随便的改.
哎.
太不灵活了.
用Static吧.
没辙.
- 已标记为答案 KeFang Chen 2010年5月19日 2:33
-
你好,
hashtable没有什么特定的使用环境,它就是以名值键对的方式来保存object。
e.g.
HashTable ht=new HashTable(); ht["first"]="first";
在ASP.NET中所谓的全局变量,主要是session和application和Cache三个,也可以用static变量用做全局变量。但是如果用static容易导致死锁,出现一些奇怪的问题。
所以你所说的hashtable是否每个访问者都能得到,得看你是怎么定义的,怎么保存的。如果用application或者cache或者静态变量的方式再保存下肯定是每个人都可以访问的,用session就只能当前用户能访问了。
Microsoft Online Community Support- 已标记为答案 KeFang Chen 2010年5月19日 2:33
-
针对一个用户的。
HashTable是个key value的键值对。
你可以放在Application里面,这样所有访问者就可以去访问这个HashTable了。
别人笑我忒疯癫,我笑别人看不穿; 不见五陵豪杰墓,无花无酒锄作田。- 已标记为答案 KeFang Chen 2010年5月19日 2:33
全部回复
-
应该是这么回事.
因为HttpModule这个类的对象是有ASP.NET这个体系的核心来创建的,
这属于底层了.
问题在于你ASP.NET底层如何创建的HttpModule这个类的对象.
被创建的对象是Private的还是Public的.
被创建的对象如何引用.
这些都是个问题.
Session的数据是因为给附加到当前的HttpContent里去了.
其实Session是可以像Application那样的.
只是被隐藏的底层代码,然后又能随便的改.
哎.
太不灵活了.
用Static吧.
没辙.
- 已标记为答案 KeFang Chen 2010年5月19日 2:33
-
你好,
hashtable没有什么特定的使用环境,它就是以名值键对的方式来保存object。
e.g.
HashTable ht=new HashTable(); ht["first"]="first";
在ASP.NET中所谓的全局变量,主要是session和application和Cache三个,也可以用static变量用做全局变量。但是如果用static容易导致死锁,出现一些奇怪的问题。
所以你所说的hashtable是否每个访问者都能得到,得看你是怎么定义的,怎么保存的。如果用application或者cache或者静态变量的方式再保存下肯定是每个人都可以访问的,用session就只能当前用户能访问了。
Microsoft Online Community Support- 已标记为答案 KeFang Chen 2010年5月19日 2:33
-
针对一个用户的。
HashTable是个key value的键值对。
你可以放在Application里面,这样所有访问者就可以去访问这个HashTable了。
别人笑我忒疯癫,我笑别人看不穿; 不见五陵豪杰墓,无花无酒锄作田。- 已标记为答案 KeFang Chen 2010年5月19日 2:33
-
其实不光是HashTable对象,任意对象在HttpModule里定义,貌似都是全局的.
有兴趣的可以研究下.
1.自定义HttpModule模块(关键)(在这个模块里定义一个Private或Public非static的对象)
逻辑代码,
if(object==null)
{
object=123;
session["abc"]=null;
}
else
{
session["abc"]=object;
}2.用这个自定义模块取代FrameWork的必须模块(关键)(比如FrameWork的Session建立模块,具体名我忘记了,可查查)
3.实际运行.
你会发现,第一个Web用户访问时,Session["abc"]等于null,而第二个Web用户访问时,Session["abc"]等于123.
也就是说,B用户读取到了A用户的对象值,然而核心问题是该对象非Static!!!
初步估计是因为HttpModule类是由IIS进程或应用程序池实例化的.
然后只要IIS进程或应用程序池进程不崩溃,自定义的HttpModule类所对应的实例对象就一直存在!
然后.
嗯.
呵呵.
FrameWork的Session持久模式中的InPro估计差不多就这样的吧..
猜测..