可能是你的index-main.aspx或者主框架页面里面有代码重写了Session.仔细检查你的代码。

解决方案 »

  1.   

    感谢您使用微软产品。首先,请您确认这个问题是否是由于下面的文章描述的问题导致的:Q323752 PRB: Session Variables Are Lost If You Use FRAMESET
    http://support.microsoft.com/support/kb/articles/q323/7/52.asp然后,请您打开Web.config确认您正在使用的Session类型,是Inproc,SQLServer还是其它?建议您提供<sessionState>元素中的具体信息。根据我的经验,如果您正在使用InProc类型的Session, 有一些原因确实会导致Session的丢失,比如说一些防病毒软件等。具体的信息,建议您参阅下面的微软知识库文章:Q324772 PRB: Session Data Is Lost When You Use ASP.NET InProc Mode
    http://support.microsoft.com/support/kb/articles/q324/7/72.asp建议您参考下面的步骤进行troubleshooting:1. 启用ASP.NET的Trace.在您的WebForm中,加入:<%Page trace="true"...%>,确认不同的页面之间的Session ID是否相同。2。改用URL Session.默认情况下,浏览器端的Session ID保存在Cookies中,如果Cookies被禁用,或者IE存在问题,可能导致ASP.NET不能识别Session.建议您使用URL Session, 这样浏览器端的Session ID 会被包括在URL中,跟浏览器端的Cookie没有关系:到开Web.config, 修改<sessionState>, 把cookieless设置为true. 这样,浏览器端就不再使用cookies来保存SessionID, 您可以在URL中观察到对应的Session ID.3。在合适的地方设置断点,然后通过QuickWatch, 来确认您的程序的执行逻辑,并通过QuickWatch来监视Session变量的值。希望上面的信息对您有所帮助。-微软全球技术中心  -zgh本贴子以“现状”提供且没有任何担保,同时也没有授予任何权利。具体事项可参见使用条款(http://support.microsoft.com/directory/worldwide/zh-cn/community/terms_chs.asp)。
    为了为您创建更好的讨论环境,请参加我们的用户满意度调查(http://support.microsoft.com/directory/worldwide/zh-cn/community/survey.asp?key=(S,49854782))。
      

  2.   

    web.config里是这样的:
    <sessionState mode="InProc" stateConnectionString="tcpip=127.0.0.1:42424" sqlConnectionString="data source=127.0.0.1;user id=sa;password=" cookieless="true" timeout="2" />
    我把trace设为true,把cookieless也设置为true,看到这三页的SessionId都是一样的。按F5刷新后,这Session Id也没有改变,但里面的“会话状态”却没有了,何解呢?(在每一个页里按右键刷新是没事的。)
      

  3.   

    原来是逻辑上的错误。
    而在这页面的unload里有一句session.abandon的语句,目的就是当用户关闭窗口是同时触发Gobal.asa里的Session_End。但当整个页面刷新的时候这unload也触发了
    现在的问题是,有什么方法可以判断用户到底是做关闭窗口的动作还是在“刷新”呢?
      

  4.   

    关于Session的问题,我以前在这里也讨论过,我觉得.Net的session机制有BUG,我用access数据库会丢失SESSION,而用SQL SERVER2K就一切正常,呵呵(排序程序清除SESSION的可能)
      

  5.   

    启动net start aspnet_state
      

  6.   

    当重新编译一遍再刷新后,就会丢session.
    不编译没事的.