session中的变量丢失是因为超时或你重新给session变量赋了值

解决方案 »

  1.   

    Session"丢失"有多种原因.
    例如:
    1.配置不正确和超时.
    2.IE的新进程.
    3.没有Global.asax我就从来没有试过真正的丢失。
      

  2.   

    不是的,我设置了30分钟,刚设置好的session值,同时在打开另外一个页面,session就很容易的丢失了。
      

  3.   

    不太明白你的session丢失的意思,能否讲具体点?
    而且要注意到:win98所有的ie窗口共享cookies设置,所以只要一个ie窗口被通过cookies设置了session,其它窗口就自动也获得这个session设置(ie5.5是这样的,不知道升级到ie6是否还是如此);而win2k下各ie窗口的cookies设置是彼此独立的,所以并不能从前面的ie窗口自动获得session.
      

  4.   

    我也有过一次这样的情况,一旦打开某个页面session就会丢失,
    后来我发现只要页面中有tag<img src=''></img>就会出现这种情况,
    我将<img src=''></img>去掉换成服务端控件
    <asp:Image id="Image1"  runat="server" ></asp:Image>
    就可以了.
    不如你也查看一下是否由于某个控件的原因引起的.
    至于其中的道理我就不太明白了,可能是asp.net的bug吧.
      

  5.   

    而且要注意到:win98所有的ie窗口共享cookies设置,所以只要一个ie窗口被通过cookies设置了session,其它窗口就自动也获得这个session设置(ie5.5是这样的,不知道升级到ie6是否还是如此);而win2k下各ie窗口的cookies设置是彼此独立的,所以并不能从前面的ie窗口自动获得session.
    ?????????????
    liangzy(阿良) 
    应该是共享同一个服务器端线程的IE才能共享一个session吧,
      

  6.   

    我的机器是w2kserver ie6总出错
      

  7.   

    .Net正式版中的一些Bug及其解决方案 作者: 飞刀         
    (1)Session的问题问题:在我的Windows.Net 3604 + .Net Framework正式版的编程环境中,.Net下的Session总是有问题,比如我在A程序下设置了一个Session字典,这个Session将会在B程序下读取,现在的情况就是我在B程序读取这个Session时,第一次能够正常读取,但一旦页面被提交(这在Asp.Net编程中是常有的事情),Session就会马上消失,错误报告“Object is null”,使用Trace发现此Session已经不存在。此问题排除浏览器不支持Cookie的可能,因为我读取Cookie是正常的。解决方法:使用Session的CookieLess状态,具体操作即更改web.config或machine.config文件,这样Session的传值是在URL中进行的。 
    使用Cookie,Cookie是可以正常使用的,只要浏览器没有关闭此功能。 
    (2)FindControl方法的问题问题:大家都知道所有控件集合都存在有一个FindControl方法,一般最常用的地方就是DataGrid对Item中控件的操作。这是一个很好用的方法,可以让我们迅速地找到我们想要的控件,但是他也是我遇到过的最不稳定的方法。在Item中使用这个方法,一般不会出现什么问题,但是在DataGrid、DataList的各种事件中这个方法经常是找不到控件!!DataGrid还好一点,DataList的事件中发生的情况就惨不忍睹,100%的找不到控件!!这个控件是活生生存在的,使用Controls集合中是可以发现这个控件的。这个问题我在Beta2下就已经发现了,原以为微软会在正式版本中更正,不知道是没有人提出呢?还是没有发现,正式版中依然这样。开始我以为FindControl这个方法没有写好,我就自个重写了这个方法,但是当我高兴地去用我自个写的方法时,发现传回来的值还是null!!!现在也就只有一个解释了,那就是.Net环境中对Control类型的支持还是不稳定的。解决方法:即然通过编写方法传回值的方法搞不定,那么就只有用最原始的方法,在本函数内,直接列举Controls集合中的控件,直到找到这个控件为止。private void ShowQuestion_ItemDataBound(object sender, System.Web.UI.WebControls.DataListItemEventArgs e)
    {
    //当返回值为Control类型,经常出现空值foreach(Control cl in e.Item.Controls)
    {
         if(cl.ClientID.IndexOf("OptionalTd1") != -1 || cl.ClientID.IndexOf("OptionalTd2") != -1)
         {
            foreach(Control clx in cl.Controls)
             { 
                if(clx.ClientID.IndexOf("Oplbl1") != -1 || clx.ClientID.IndexOf("Oplbl2") != -1)
                 {
                     if(((Label)clx).Text == "")
                    {
                        ((HtmlTableCell)cl).InnerHtml = "";
                    } 
                }
             }
          }
    }是程序员都会对上面的方法蚩之以鼻,但是没有办法了,微软逼我走上了这条路,不然没有办法找到我要的东东。(3)OleDb的问题问题:大家都知道.Net平台下访问数据库有两种途径,一种是SqlClient,另一种就是OleDb,SqlClient是专为SQL Server设计的,为了保证程序的兼容性,我们还是得使用OleDb。使用OleDb是一件令人痛苦的事情,必须有着超人的意志力和耐心,使用OLEDB写一次程序和做一次恶梦没有两样,大家真不知道那些五花八门的错误出在什么地方。先看下面的程序。string strInsertRead = "Insert Into UnRead (Judge1_Result,Judge2_Result) ";
    strInsertRead += " Values (@Judge1_Result,@Judge2_Result)";OleDbCommand MyComm = new OleDbCommand(strInserRead,MyConn);MyComm.Parameters.Add("@Judge1_Result",OleDbType.LongVarChar);
    MyComm.Parameters["@Judge1_Result"].Value = strJudge1_Result;MyComm.Parameters.Add("@Judge2_Result",OleDbType.LongVarChar);
    MyComm.Parameters["@Judge2_Result"].Value = strJudge2_Result;......MyComm.ExecuteNonQuery();执行这么一段程序,你们认为会报什么错误?(注意MyConn是OleDbConnection实例,已经打开)报出的错误是“输入数据类型与数据库字段类型不匹配!!”?我是想了好久?strJudge1_Result和strJudge2_Result都是string,而数据库中相应字段的为"TEXT",怎么会相配?怎么也不可能啊。没有办法,我改变字段的数据库类型试着让数据录入数据库,然后再直接从数据库中查看录入的数据是什么?一看不知道,一看就把我气昏,进入数据库的并不是strJudge1_Result和strJudge2_Result所表示的判断的结果,而是设定的另一个变量IdCard和Template,两个毫不相干的变量怎么会搞到一起去??我使用Trace查看入库前strJudge1_Result的数据是正确的,这就说明是在入库时出现的问题,这里就是Parameters属性做的好事!我把这个程序中的OleDB全部改成Sql,程序全部正常!我只能说OleDb的数据库操作是垃圾(也许说的有些过火),大家如果操作OleDb出现了一堆问题,你要信任自己,有些事情不是你的错,而是微软不想你用其它的数据库。解决方法:如果您是操作SQL Server,那么我建议您直接使用SqlClient,这样免去很多麻烦。如果非要使用OleDb来操作其它的数据库,请尽量少用Parameters属性来传递参数,而是直接写进SQL语句:string strInsertRead = "Insert Into UnRead (Judge1_Result,Judge2_Result) ";
    strInsertRead += " Values ('"+strJudge1_Result+"','"+Judge2_Result+"')"; 
      

  8.   

    mode="InProc"
                stateConnectionString="tcpip=127.0.0.1:42424"
                sqlConnectionString="data source=127.0.0.1;user id=sa;password="
                cookieless="true" 
                timeout="20" 
    还是不行啊
      

  9.   

    全局变量采用application、cache、static变量、session页面级采用viewstate
      

  10.   

    viewstate怎么用,比如说我要一个页面级的bool变量???
      

  11.   

    to ykn(ykn),建议采用viewstate,具体使用方法可参考:帮助中的:
    ms-help://MS.VSCC/MS.MSDNVS.2052/cpguide/html/cpconwebformstate.htm
    wish you good luck!