服务器为虚主机:window server 2003中文版
客户端IE 6.0 
web.config: sessionState timeout="20".
Seesion不到3、5分钟就丢失
但是有时刷新一下页面,Session又出现了,再刷新一下,又没了.浏览分页记录时,有时点下一页时,会突然跳到登录窗口,返回刷新一下,又正常了在本地没这个问题极度郁闷

解决方案 »

  1.   

    以下是测试代码:
    登录页login.aspx 
    if (Password.Text.Trim()=="888")
    {
       Session["Test"]="1";
       Response.Redirect("DataList.aspx");
    }数据管理页:
    if (!IsPostBack)
    {
        if (Session["Test"]==null)
        {
    Response.Redirect("Login.aspx");
        }
    }其他地方,没有对Session进行任何操作
      

  2.   

    这种问题,很多人碰到过,但都无解.
    只能怀疑是WINDOWS的BUG.
    如果有可能的话,重装安装系统.
    或者,过一阵子说不定哪天它又自己好了.
      

  3.   

    不过,现在有一些处理方法的汇总,不一定能生效,但是有时候可以,你可逐一尝试.大家不妨试试..........................
    IIS--->>应用程序连接池--->>属性---->>[回收][性能][运行状况]里的各项参数尽量都往大的改^_^),我不知道改拉那个才对的,反正我改完后所有的session都好拉.客户的网站和动网论坛的后台也跟着好拉
    将Session保存在State Server里:1.启动服务“ASP.NET State Service”,
    2.然后,修改web.config:
    <sessionState 
    mode="StateServer"
    stateConnectionString="tcpip=127.0.0.1:42424"
    sqlConnectionString="data source=127.0.0.1;Trusted_Connection=yes"
    cookieless="false" 
    timeout="140000" 
    />注意://mode="StateServer"这种模式下即使修改页面也不会丢失session!
    当然:
    mode="InProc"如果你的模式为这种,修改页面的时候会丢失session!!!!!!
    对于session而言,即时你设置再长的时间,也不是很有用,因为session的释放主要是.net自动管理,如果服务器资源严重不足,它会很快释放掉。对于上述情况,建议使用.net的页面票据验证,如果session不存在的话,让它再生成一次....
    可帮你解决此问题上述要应用到cookie,也许对于安全方面不是很好^_^1.应用程序是否使用了 Inprocess Session模式
    2.可以在应用程序的 Global 对象的 Application_Start 或者Application_End 中写一些log 信息,看看是否 应用程序也周期性地在被重新启动, 如果是,那么可以确定是应用程序重起造成的Session 丢失。以前做过一个项目也发生了session过早过期的现象,经过我观察发现aspnet_wp进程占用的内存如果超过系统内存总量的一定比例就过期了,后来客户把256m内存加到1g,问题就没了。不知道是不是由于内存原因
    如果每个客服端去访问服务器都会这样的话,那可能就是IIS的问题,如果只是个别的客服端的问题,那就是客服端的浏览器的问题!我以前碰过客服端的问题,session过早失效,重装浏览器就又好了。服务器端的问题就暂时还没有遇到过!
    SessionState 的Timeout),其主要原因有三种。
    一:有些杀病毒软件会去扫描您的Web.Config文件,那时Session肯定掉,这是微软的说法。
    二:程序内部里有让Session掉失的代码,及服务器内存不足产生的。
    三:程序有框架页面和跨域情况。
    第一种解决办法是:使杀病毒软件屏蔽扫描Web.Config文件(程序运行时自己也不要去编辑它)
    第二种是检查代码有无Session.Abandon()之类的。
    第三种是在Window服务中将ASP.NET State Service 启动。http://community.csdn.net/Expert/topic/3100/3100218.xml?temp=.4426386
    还有可能就是你在测试期间改动了,网站的文件。
    下面是帮助中的内容:
    (ms-help://MS.VSCC.2003/MS.MSDNQTR.2003FEB.2052/cpguide/html/cpconsessionstate.htm)
    ASP.NET 提供一个简单、易于使用的会话状态模型,您可以使用该模型跨多个 Web 请求存储任意数据和对象。它使用基于字典的、内存中的对象引用(这些对象引用存在于 IIS 进程中)缓存来完成该操作。使用进程内会话状态模式时请考虑下面的限制: 使用进程内会话状态模式时,如果 aspnet_wp.exe 或应用程序域重新启动,则会话状态数据将丢失。这些重新启动通常会在下面的情况中发生: 
    在应用程序的 Web.config 文件的 <processModel> 元素中,设置一个导致新进程在条件被满足时启动的属性,例如 memoryLimit。 
    修改 Global.asax 或 Web.config 文件。 
    更改到 Web 应用程序的 \Bin 目录。 
    用杀毒软件扫描并修改 Global.asax 文件、Web.config 文件或 Web 应用程序的 \Bin 目录下的文件。 
    如果在应用程序的 Web.config 文件的 <processModel> 元素中启用了网络园模式,请不要使用进程内会话状态模式。否则将发生随机数据丢失。我当初是被Macfee的杀毒软件搞死掉
    导致系统的session很快过时,最后我把macfee的杀毒软件卸载掉
    换了诺顿或瑞星,就没问题了
      

  4.   

    最好用cookie啦,另外,Web 园数目要设置为1
      

  5.   

    你可以用.net自带的login系统,在 webconfig里设置
      

  6.   

    如果情况不能解决还是用COOKIE,我记得ASP。NET斑有个斑竹有发过这样的问题,但是后来好象也没解决。如果找得到,发给你看看
      

  7.   

    http://community.csdn.net/Expert/topic/3561/3561164.xml?temp=7.496279E-02你可以看一下!
      

  8.   

    我有个想法,session刚赋值时,是肯定会存在的,这时把信息写到数据库,如果session为空时,看看数据库该记录的最后时间,如果在超时范围内,就再赋值一次
      

  9.   

    微软本身并不推荐使用Session,究其原因我想是错误太多了,而且有时候是莫名其妙的错误,建议不要使用Session,个人观点!
      

  10.   

    关键是要有替代的方案啊,我现在要保存个人的临时信息,而且还是一个hastable对象,如何存呢?
      

  11.   

    etyyy(主动脉) 你好,这方面有什么注意的吗?因为是租用的主机,所以也不太清楚具体的设置,在本地是没问题的
      

  12.   

    etyyy(主动脉) 你好,这方面有什么注意的吗?因为是租用的主机,所以也不太清楚具体的设置,在本地是没问题的
      

  13.   

    我以前也遇到过这个问题,应该是iis的应用程序池的问题,包括Web园数目和回收数值的设置
      

  14.   

    我也建议不要用Session,麻烦的事儿太多了.
      

  15.   

    大家的建议是用cookie吗?可是cookie安全性低,比如用作用户登录验证,那么有可能关闭浏览器后,新打开浏览器,该用户还处在登录状态
      

  16.   

    Session在InProc模式下容易丢;
    改成StateServer或者SqlServer模式不会丢,不过前者要服务器启动
    StateServer Service,后者要把Session保存到sqlserver数据库中。
      

  17.   

    原版主acewang (龍芯*Inside!) 所发:http://community.csdn.net/Expert/topic/3561/3561164.xml?temp=7.496279E-02
    http://community.csdn.net/Expert/topic/4037/4037098.xml?temp=3.057498E-02