.net 1.1 父页面在按钮事件中写入Session,然后js方式打开子页面,在子页面中读取session,但是读取的时候,有时session存在,有时不存在,很是费解。而且调试模式下经过反复测试是没问题的,发布到正式服务器就会出现这个问题。
代码如下:父页面按钮事件:
Session["arr"] = arr;//arr是一个构造好的ArrayList
Response.Write("<script>window.open('Plan.aspx', '_blank');</script>");
按钮事件结束子页面:
private void Page_Load(object sender, System.EventArgs e)
{
   if (!IsPostBack)
   {
this.DataBind();
if (Session["arr"] != null)
{
ArrayList arr =(ArrayList)Session["arr"];

}
   }
}读取的时候,有时session存在,有时不存在,很是费解。还有更奇怪的问题,测试发现,如果父页面打开子页面的时候,session没有读取到,那么刷新子页面,就可以读取到;于是我怀疑是session写入延时(当然,这个想法是逼不得已的白痴想法),导致第一次没有读取到,于是在第一次读取不到的时候,将进程睡眠3秒,然后再次尝试读取,还是无法取到,仍然是刷新页面就有了...我跟踪了两个页面的,父子页面的SessionID相同。
因为必须要打开新窗口,所以Server.Transfer和Response.Redirect都无法使用,请各位高人指点一二,不胜感激!

解决方案 »

  1.   

    想使用Session 就要付出时好时无的准备~
      

  2.   

    发布到服务器上,存储模式改为存在sql中或者另一种,不要用mode="InProc"这种,这种只要iis稍有异动就会丢失。。
      

  3.   

    sql server存储配置节为这个: 
    <sessionState mode="SQLServer" allowCustomSqlDatabase="true" sqlConnectionString="server=192.168.1.1;database=ASPState;uid=sa;pwd=sa;"  timeout="60" > </sessionState> 
    allowCustomSqlDatabase="true" 如果要指定数据库必须设此属性为true; 再配置数据库,如下 1对脚本称为InstallSqlState.sql和UninstallSqlState.sql。它们创建一个称为ASPState的数据库和几个存储过程。然而,数据存储在两个属于TempDB数据库的表中。在SQL Server中,TempDB为临时表、临时的存储过程和其他临时的工作存储需求提供了存储区。这表明,如果SQL Server机器重新启动,则会话数据被丢失。 第2对脚本称为InstallPersistSqlState.sql和UninstallPersistSqlState.sql。在这种情况下,也是创建一个ASPState数据库,但是其中的表是持久性的,因为它们在相同的数据库内创建。所有的脚本都位于如下路径中: 
    %SystemRoot%\Microsoft.NET\Framework\[version] 
      

  4.   


    谢谢fuda_1985兄的意见,由于这是一个老项目,而且是核心系统,非常重要,修改网站整体的session策略,风险太大,阿门
      

  5.   


    现在看起来不是session丢失导致,因为我刷新子页面还是可以取到的
      

  6.   

    你的是自己的服务器么?
    我的.net 2.0 ,自己的服务器,后台和前台保存用户信息都是用Session, 丢失的情况极少。
    如果是自己的服务器可以适当延长Session的保存时间哦。
      

  7.   

    session 有可能被iis 回收。好的办法 提升你的iis版本(其实是被gc回收的。gc 是。net垃圾回收器)
      

  8.   

    jason_dct 可能没注意到我描述的现象,虽然子页面第一次取不到,但我刷新子页面是可以取到session的,所以不会是过期
      

  9.   

    session丢失很常见的!
    可以像4楼说的那样!
    也可以<sessionState mode="StateServer" cookieless="false" timeout="60"/>
      

  10.   


    我在父页面中点击按钮马上跳转到子页面,这个过程应该不会session丢失,而且刷新子页面仍然可以取到session,注意,我只刷新了子页面,并没有重写session,这说明在刷新的时候session是可以获取的,只是跳转时,第一次加载有可能取不到session。
      

  11.   

    这很好理解,你在自己电脑上调试时,整个服务器就你一个用户,负担小,稳定.
    你放到真正的服务器上,N多人用,压力大,资源回收频繁,session在很短时间内就失效.建议用其它的方法,舍弃session
      

  12.   

    楼主 去  看下  session保存的 三种方式吧 session丢失很正常。。  
      

  13.   

    兄弟好是想想其他的办法吧。
    或者按照我上面说的,或者使用Cookie。
    总之Session丢失很常见了