随笔 - 46  文章 - 16 评论 - 1171 trackbacks - 23

.net asp web c# vb VS2005 VS2008 VS2003

    姓名 景春雷
    网名 1-2-3
    生日 1980.2.29
    城市 沈阳
以前只在电影里看到过黑人总统。没想到这么快就变成现实了。 11-6 10:24

与我联系

搜索

 

常用链接

我参与的团队

我的标签

随笔分类(46)

随笔档案(45)

文章分类(15)

相册

收藏夹(2)

积分与排名

  • 积分 - 153816
  • 排名 - 261

最新评论

阅读排行榜

评论排行榜

让 HTTP 处理程序与当前的Web程序共享Session,实在是简单到了不能再简单的地步——只要让类 MyHandler 实现 System.Web.SessionState.IRequiresSessionState 接口就行了。就像这样
MyHandler.cs

之后我们在 MyHandler 类里面就可以通过 context.Session 或 直接使用 System.Web.HttpContext.Current.Session 来访问 Web 应用程序的 Session 了。

下面我们来作一个很简单的 Demo。它实现的效果和本系列第二篇的效果完全一样。只不过这次使用的方法不是通过字符串参数而是使用 Session 将信息由Web程序传递给 MyHandler。这是完成后的效果


源代码

MyHandler.cs

Default.aspx

Default.aspx.cs


上面的代码用了几个小技巧:

1.  避免 Session 重名。我们的应用程序可能会有许多地方会用到 Session,如果出现重名,就会产生很难捉到的 Bug,所以我们必须使用一种可以有效避免重名的命名规范。在本例中,我们使用的命名规范是“命名空间名+类名+属性名”,见 MyHandler.cs 的第22行。

2. 将对 Session 的访问封装到属性中。为了避免 Session 重名,我们使用了很长的 Session 名称。这长长的名字即不易读,也难以书写。放到代码中,会使代码冗长而丑陋。更要命的是,如果万一需要修改某个 Session 名字,就需要在整个项目中进行查找和替换,这是一项既乏味又危险的工作。解决方法是,将对 Session 的读写封装到一个静态的属性中,见 MyHandler.cs 的第20~24行、MyHandler.cs 的第28行、Default.aspx.cs 的第17行。

3. 使用 System.Web.HttpContext.Current.Session 访问当前Web 应用程序的Session。通常我们是使用 Page.Session(在网页的后台代码中)或 context.Session(在 MyHandler 类的 ProcessRequest 函数中)来访问当前Web应用程序的 Session。但是在类库中,我们无法获取 Page 变量或 context 变量,这时我们就可以使用System.Web.HttpContext.Current.Session 访问当前Web 应用程序的Session,见 MyHandler.cs 的第20~24行。

本篇到此结束,下一篇将利用本篇的代码,稍加改动,实现不需临时文件,直接生成PDF文件并下载到客户端。

下载本篇全部源代码

本系列共6篇文章
    实战 HTTP 处理程序(HTTP Handler) (6)——条码随意打
    实战 HTTP 处理程序(HTTP Handler) (5)——不用临时文件,直接打开动态生成的文件
    实战 HTTP 处理程序(HTTP Handler) (4)——与Web程序共享Session   <- you are here.
    实战 HTTP 处理程序(HTTP Handler) (3)——动态生成图片
    实战 HTTP 处理程序(HTTP Handler) (2)——向HTTP 处理程序传递参数   
    实战 HTTP 处理程序(HTTP Handler) (1)——创建一个最简单的 HTTP Handler  

 

posted on 2007-09-05 09:05 1-2-3 阅读(2638) 评论(12)  编辑 收藏 网摘 所属分类: 实战HTTP处理程序系列

FeedBack:
#1楼  2007-09-05 09:10 Leepy      
不错不错!继续关注!
  回复  引用  查看    
#2楼  2007-09-05 09:33 Clark Zheng      
详细看完,继续支持
  回复  引用  查看    
#3楼 [楼主] 2007-09-05 09:35 1-2-3.cnblogs.com      
谢谢两位的支持。感动ing...
  回复  引用  查看    
#4楼  2007-09-05 10:10 邓林海      
session命名有必要这样吗?会用这么多session吗,值得思考
  回复  引用  查看    
#5楼 [楼主] 2007-09-05 10:19 1-2-3      
@邓林海
Session 就像全局变量,稍有疏忽就会出乱子,而且难以Debug。全局变量如果重名还可以依靠编译器报错,Session重名则只有在运行时才有可能发现。
  回复  引用  查看    
#6楼  2007-09-05 10:19 idzi [未注册用户]
不错不错……关注
  回复  引用    
#7楼  2007-09-05 22:49 簡單就好      
希望楼主说说原理咯
  回复  引用  查看    
#8楼  2007-09-05 22:49 簡單就好      
用这个东西有什么用咯。
  回复  引用  查看    
#9楼 [楼主] 2007-09-06 09:15 1-2-3      
@簡單就好
下一篇有一个此项技术的实际应用。
  回复  引用  查看    
#10楼  2007-10-11 13:32 黃偉榮      
謝謝,這個問題搞了我一二個小時,沒想到那麼簡單就解結了。
  回复  引用  查看    
#11楼 [楼主] 2007-10-11 16:34 1-2-3      
@黃偉榮
有台湾的朋友来作客真的很高兴!
网络真是神奇,远隔千里却有近在咫尺的感觉。
  回复  引用  查看    
#12楼  2008-11-03 17:23 aierong      
将对 Session 的访问封装到属性中。为了避免 Session 重名

不错
  回复  引用  查看    

标题  
姓名  
主页
Email (博主才能看到) 
验证码 *  看不清,换一张 [登录][注册]
内容(请不要发表任何与政治相关的内容)  
  登录  使用高级评论  新用户注册  返回页首  恢复上次提交      
该文被作者在 2007-10-08 13:50 编辑过
Google站内搜索


China-pub 计算机图书网上专卖店!6.5万品种 2-8折!
近千种 9-95 新二手计算图书火热销售中!

相关文章:

相关链接: