我的系统只缓存了整个登陆页,一两台机子登陆后进入用session辨别的用户资料页面没问题,但数百人使用之后就出现了登陆后进入他人用户资料页面的情况,而且刷新,用户资料页面会不断改变成其它任何人。举例如下:
   张三登陆后,看到的却是李四的资料,刷新一下又变成王五的资料,请教原因!感谢  
缓存方法:<%@OutputCache  Duration="3600"  Location="Server"  VaryByParam="none"%>

解决方案 »

  1.   

    缓存策略 VaryByParam="none" 有问题
    因为你的缓存只是记录了某个时间点发生的一次缓存记录,对于以后所有的用户只是看到该时间点的信息,直至缓存时间到期,再重新记录。
    建议把缓存策略改成 VaryByCustom
      

  2.   

    同意reaperwu(RQ)
    SESSION最好不要以时间来设置
      

  3.   

    reaperwu(RQ) 正确,可以用个Guid值来设置
      

  4.   

    我以前也出现过这种情况。应该和缓存没有关系。你到出现看到别人信息的页面看一下是不是用了static静态变量的事?
      

  5.   

    缓存策略 VaryByParam="none" 有问题
    因为你的缓存只是记录了某个时间点发生的一次缓存记录,对于以后所有的用户只是看到该时间点的信息,直至缓存时间到期,再重新记录。
    建议把缓存策略改成 VaryByCustom
      

  6.   

    没有静态变量,只用了session辨别
    缓存策略上,缓存我只用在登陆页上,在用户资料页没用缓存呀?还请指教!
      

  7.   

    看看IIS设置,我原来也碰到过,好像和IIS的设定有关
      

  8.   

    你可以跟踪一下你登陆页所POST的值
    在一次登陆之后,以后所有传送的控件值都是一样的,表面看起来你已经更改了控件值然后你在把缓存去掉就可以很明显的比较了
      

  9.   

    IIS什么方面设置呀?
    reaperwu(RQ)的建议不是很理解,可以更清楚吗?谢谢!我开始几个人测试使用不会有问题,但实际几百人操作,过半小时左右,出现此问题
      

  10.   

    我试验了一下,在自己的系统的登陆页加多了缓存,发现页面缓存(第一次登陆)以后,提交按钮的Button_Click事件是不能触发的,所以不清除你所说的"开始几个人测试使用不会有问题"。
      

  11.   

    如果你所说的"开始几个人测试使用不会有问题"是每次测试的时候每次都是重新编译的,那每次编译后缓存都会清空,所以不会有问题。
    再不然,先把缓存去掉
    <%@OutputCache  Duration="3600"  Location="Server"  VaryByParam="none"%>
    看看问题是否出现在其它地方
      

  12.   

    不好意思,没讲清楚,登陆验证我是放在另一个页面的,既index.aspx登陆页<form name="form1" method="post" action="zjdl.aspx">,post给zjdl.aspx,缓存在index.aspx上,zjdl.aspx没有缓存
      

  13.   

    缓存去了就一切正常,现在正在用,但速度慢呀!开始几个人测试使用我没重新编译,感谢reaperwu(RQ) ,还请帮忙
      

  14.   

    缓存策略 VaryByParam="none" 有问题
    因为你的缓存只是记录了某个时间点发生的一次缓存记录,对于以后所有的用户只是看到该时间点的信息,直至缓存时间到期,再重新记录。
    建议把缓存策略改成 VaryByCustom
      

  15.   

    上面已经谈过了
    第一次登陆(假如用户名是User)以后,整index.aspx页面包括控件都已经被缓存了
    以后在缓存期间所有的登陆操作,POST给zjdl.aspx的用户名都是User(即使你是填了AnotherUser)
    而个别的案例"开始几个人测试使用不会有问题"可能是没有命中缓存(个人主观意见)你可以试试用框架IFRAME把登陆那一个模块隔离出来
      

  16.   

    缓存策略改成 VaryByCustom=browser,会不会让缓存爆满呀?
    我用框架IFRAME把登陆那一个模块隔离出来,还是不行!他登进去资料都对应,但一刷新,全都变成他人资料了!刷一下,换一个人!这种现象也是发生在几百人操作半小时左右以后!
      

  17.   

    1、"但数百人使用之后就出现了登陆后进入他人用户资料页面的情况,"
    2、"他登进去资料都对应", "但一刷新,全都变成他人资料了!刷一下,换一个人!"
    是不是用户资料显示页面或者控件在程序上有问题VaryByCustom
    可以不用browser,自定义字符串也行 eg、VaryByCustom="myCustomString"
    然后在Global.asax文件中重写GetVaryByCustomerString方法
    override GetVaryByCustomerString(HttpContext context, string custom)
    {
        switch ( custom )
        {
            case "myCustomString" :
            {
                return Session["XXX"].ToString()
            }
        }    return null;
    }