惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
L
LangChain Blog
WordPress大学
WordPress大学
MyScale Blog
MyScale Blog
The Cloudflare Blog
J
Java Code Geeks
Google DeepMind News
Google DeepMind News
Recent Announcements
Recent Announcements
Microsoft Azure Blog
Microsoft Azure Blog
Y
Y Combinator Blog
有赞技术团队
有赞技术团队
Last Week in AI
Last Week in AI
酷 壳 – CoolShell
酷 壳 – CoolShell
Martin Fowler
Martin Fowler
小众软件
小众软件
量子位
月光博客
月光博客
P
Proofpoint News Feed
IT之家
IT之家
腾讯CDC
博客园 - 三生石上(FineUI控件)
博客园 - 司徒正美
雷峰网
雷峰网
V
Visual Studio Blog

博客园 - laifangsong

请问福州哪里卖打折计算机图书,又可按原价开发票的? 关于目录访问的iis配置问题 福州招聘asp程序员 qq聊天的小秘密 吃鱼引发的问题和中国式管理 为什么点击flash链接到本页面,Request.Referrer将无法获得url来源 观察。总结 - 思想(一) 在csdn上看到奶牛问题,写了下算法 C#(1.1)邮件发送类,功能全面,调用灵活、方便 思考_070614 asp中JMail(4.4)发送邮件 单个文件上传类(可以自定义配置) iis6(win2003)中的aspnet_client和iis5,5.1(win2000,winxp)不一样,系统迁移时一定要注意。 不错的分页存储过程(转) 矩阵相乘(c) 委托:两个例子(主人仆人、打游戏) 取奇数游戏(c) 用递归算法求和为指定值N的所有组合 汉若塔问题(c)
看似诡异的session赋值错误
laifangsong · 2007-04-14 · via 博客园 - laifangsong

最近做一个小系统,在系统管理后台,做了一个PageBase类,供后台其他页面继承。
在该类的构造函数中验证是否Session有值;有值表示处于登录状态,否则返回后台登录页面。

但一写类似这样的代码: if(Session["key"]!=""){...}, 就提示错误:
只有在配置文件或 Page 指令中将启用会话状态设置为真时,才可以使用会话状态
代码大略这样:
PageBase.cs:
================
public class PageBase : System.Web.UI.Page
{
   public PageBase()
   {
         if(Session["Key"]!="")
         {
               ...
         }  
   }
   ...
}
Admin_Index.aspx:
================
...
...

Admin_Index.cs
================
public class Admin_Index : PageBase
{
   ...
   private void Page_Load(object sender, System.EventArgs e)
   {
        ...
   }
   ...
}

做了以下测试,查找原因:
1.  在 Admin_Index.cs的Page_Load事件中读写Session,结果:一切正常,可以正常赋值
2.  在 Admin_Index.cs的构造函数中读写Session,结果:提示同样错误
3.  在 PageBase.cs的任意位置读写Session,结果:提示同样错误
似乎只能在Page_Load等系统事件中,才能正常读写。

google了一下,发现可能的几个原因:
1.web.config中 <page enableSessionState="false" />,应为"true"
2.aspx页面中的<mailto:%@%20Page&amp;amp;nbsp;&amp;amp;nbsp;enableSessionState="false">,应为"true"
3.Session["key"]="" 改为 System.Web.Httpcontent.Current.Session["key"]=""

由于Page_Load事件中Session读写正常,基本可以排除上面几个原因;并且可以判断可能是 Session写错了地方。

之后,又搜到一篇:http://www.nqqn.com/ym/183/102910.htm
了解到大概原因:在构造函数运行时,Httpcontent.Current.Session对象未生成,不能引用.
(google下 asp.net事件模型,可以了解下 Session对象是何时产生的);将Session读写放在PaeBase.cs的OnInit事件中,不再有错误。

正确写法:
PageBase.cs:
================
public class PageBase : System.Web.UI.Page
{
   public PageBase()
   {
   }


  protected override void OnInit(System.EventArgs e)
   {
          if(Session["Key"]!="")
         {
               ...
         }       
   }
}