我在同一台机中,使用两个不同用户(test1,test2)登录系统,并且都使用了Session["uid"]来保存变量,但现在的问题是:当我其中的一个用户注销(清除Session)掉后,那个在线用户页面就出错了(也就是把此用户的Session也清掉了),如何避免这种情况呢???大家碰到这种情况通常是如何清除Session的???

解决方案 »

  1.   

    一般都是用url传值,至于session丢失的问题就多了~
      

  2.   


     Session.Remove("名称");//楼主最好移除指定的session
      

  3.   

    我注销的代码就这么一句:Session.Clear();
      

  4.   

    我用session 总是不稳定,也没查到原因,就改成用 cookie 了
      

  5.   

    在前台页面中加下面的脚本看看啊 
    <script>
                 Sys.WebForms.PageRequestManager.getInstance().add_endRequest(EndRequestHandler); 
                function EndRequestHandler(sender, args) 
                { 
                    if (args.get_error() != undefined) 
                    { 
                        if(args.get_error().message.substring(0, 51) == "Sys.WebForms.PageRequestManagerParserErrorException") 
                        {
                            //window.location.reload();  //出现Session丢失时的错误处理,可以自己定义。
                            document.getElementById("btnLogin").click();
                        } 
                        else
                        {
                            alert("发生错误!原因可能是数据不完整,或网络延迟。"); //其他错误的处理。
                        }
                        args.set_errorHandled(true); 
                    }
                } 
                </script>
      

  6.   

    四楼是这个意思吧:Session.Remove("uid"); 
    我登录成功后是这样写的:Session["uid"]=tbxUser.Text;
      

  7.   


     Session.Remove("id");
     FormsAuthentication.SignOut();
    就这样写
    同一台机器同一个浏览器是不可能同时有两个帐号同时登录的,
      

  8.   

    你seeion保存的什么就是是什么
     Session.Remove("id");
     FormsAuthentication.SignOut();
      

  9.   

    同一台机器同一个浏览器同时登录两个帐号,session只会保存最后一次登录的值.你的注销代码换成我发的.clear()方法少用,好比有个用户登录,并且有一个购物车也是session保存,你用clear()那就把所有的session值都清空了.
      

  10.   

    据说session会丢值的,最好少用
      

  11.   

    我试过了,使用Session.Remove("uid")一样会把所有的Session清空!!!
      

  12.   

    这问题用session没法解决。关于session失效问题,如果是放在服务器上,你没有配置session的存储方式,是很容易出现的,默认存储在iis内存上,换种存储模式就行了。
      

  13.   

    似乎大部分的Session丢失是客户端引起的,所以要从客户端下手,看看cookie有没有打开,Session的时间设置是不是有问题,会不会因为超时造成丢失
      

  14.   

    你保存的时候就各自用各自的session,取不用的名称。清空的时候指定名称清空应该就不会丢失了
    我实现注销功能的时候直接Session["uid"]="";
      

  15.   


    对啊你test1登陆之后,再登陆test2,此时应该是test2了,刷新一下页面,应该出来的是test2的,就算不刷新你直接点退出,清除应该也是test2的
      

  16.   


    就算你创建100个页面也是同一个Session吗!这可算很基本的知识。
      

  17.   

    所谓“不同页面使用同一个Session”,原因就是因为它们的cookie也是完全相同的东西、共同使用的东西。所以这样照问题是浪费时间的。
      

  18.   

    同一台机器同一个浏览器,
    用第一个帐号登陆时,
    Session["uid"]=tbxUser.Text;//tbxUser.Text的值为"ABC"
    再用第二个帐号登陆,
    Session["uid"]=tbxUser.Text;//tbxUser.Text的值为"XYZ"
    这个时候,Session["uid"]被再次赋值,
    原来的"ABC"从机器内存里面消失了,不存在了!!!!好好理解9楼的意思!!
    认真思考下,Session是个什么东西!!
      

  19.   

    你用的是同一个浏览器吗 如果是的 那么session不是丢失了
    是覆盖了
      

  20.   

    此问题应该是有解的,比如126邮箱,在IE中用[email protected]进去,再用[email protected]进去,再退出[email protected],[email protected]依然能正常使用啊!所以我相信此问题应该可以解决的,只是我们都限于水平,所以,不过还是非常感谢大家!
      

  21.   

    搞笑了吧。
    Session哪里这么容易丢失,
    把微软当成白痴了?
    你 注销什么呀?(这不是cs程序!)
    直接关了了IE不就行了。
      

  22.   

    bs的不用注销。还是关ie吧,把你的程序设置成主页就行了,
    一打开就行了。
      

  23.   

    可以试试这样,为每个用户随机产生一个整数i,然后把他的id保存在Session[" + i.ToString() + "id"]里,再把i保存在ViewState里,使用的时候,先从ViewState读出i,然后再清相应的Session.
    以前用webBrowser打开多个页面,需要不同的Session,就是这样解决的。