急!进者加分!---
asp.net中Session问题:为什么我在一个页面把Session["uid"]=0,即退出系统,可重新打开管理页面仍可进入?就是说Session["uid"]此时并不等于注销时设置的值即Session["uid"]!=0,奇怪,请高手释惑!!!

解决方案 »

  1.   

    System.Web.Security.FormsAuthentication.SignOut();
    Session.Abandon()
      

  2.   

    你是不是从新进入了该系统,那就是又初始化新的session,所以此时应该是null
      

  3.   

    重新打开的时候看看Session 有没有被另外赋值
      

  4.   

    敬告各位:
     如果把管理界面刷新一次Session["uid"]就等于0了,也即是说:彻底退出系统了,为什么要刷新一次才会达到这种目标呢?
      

  5.   

    Session.Abandon()
    把session释放掉!
      

  6.   

    敬告各位:
    我在退出系统时代码如下:
    .......
    Session["uid"]=0;
    Response.Redirect "login.aspx"
    .......
    而管理界面部分检测是否登陆代码:
    if(Session["uid"]==null||Session["uid"].ToString().Length==0||(int)Session["uid"]==0)
    {
    ......
    Response.Redirect "login.aspx"
    ......}
      

  7.   

    同意使用
    Session.Abandon();或Session.remove("uid");
    你的写法有问题,应该这么写
    if(Session["uid"]==null||Session["uid"].ToString().Length==0||((int)Session["uid"])==0)
    用上面的方法调试通过!
      

  8.   

    Global.asax里面是不是设置了什么?
      

  9.   

    早解决了,这个是asp.net1.0/1.1有的毛病,原因是
    Response.Redirect "login.aspx";这句代码的毛病。
    这个代码的作用是通过一个特殊的http标头信息指示客户端浏览器重定向,而asp.net中的Session对象和Cookie对象在赋值操作时后面如果跟Response.Redirect这样的方法时,服务器无法对Session对象和Cookie对象进行操作。说白了就是如果有这样的代码:
    Response.Cookies.Add(...);
    Session.Add(...);
    Response.Redirect(...);
    那么前面两行操作Cookie/Session的代码都无效,这是asp.net的原因,没有任何办法。解决方法是使用js脚本执行重定向,方法是:// 首先操作Session
    Session["uid"]=0;// 然后构造一个Js脚本,为了美观,用StringBuilder建立字符串。
    System.Text.StringBuilder sb = new System.Text.StringBuilder();
    sb.Append("<script language=\"javascript\" type=\"text/javascript\">\r\n");
    sb.Append("<!--\r\n");
    \\ 表示在客户端IE把html内容载入后再执行
    sb.Append("function window.onload()\r\n");
    sb.Append("{\r\n");
    sb.Append("window.location.href = \"login.aspx\";\r\n");
    sb.Append("}\r\n");
    sb.Append("</script>\r\n");// 注册脚本
    if(!Page.IsRegisterStartupScript("myRedirScript"))
     Page.RegisterStartupScript("myRedirScript", sb.ToString());
    这个方法可以保证让你的Session和Cookie得到正确的处理,绝对不会丢失。
    不过如果客户端关闭了js执行,那么就一点办法也没有了。
      

  10.   

    抱歉,上面的生成js的代码少了一行,少了一个//-->的标记,应该是
    // 首先操作Session
    Session["uid"]=0;// 然后构造一个Js脚本,为了美观,用StringBuilder建立字符串。
    System.Text.StringBuilder sb = new System.Text.StringBuilder();
    sb.Append("<script language=\"javascript\" type=\"text/javascript\">\r\n");
    sb.Append("<!--\r\n");
    \\ 表示在客户端IE把html内容载入后再执行
    sb.Append("function window.onload()\r\n");
    sb.Append("{\r\n");
    sb.Append("window.location.href = \"login.aspx\";\r\n");
    sb.Append("}\r\n");
    sb.Append("//-->\r\n");
    sb.Append("</script>\r\n");// 注册脚本
    if(!Page.IsRegisterStartupScript("myRedirScript"))
     Page.RegisterStartupScript("myRedirScript", sb.ToString());
      

  11.   

    TomMax(笑望人生)
    我的环境是asp.net 1.1.43
    第一个页面
    webform1.aspx
    private void Page_Load(object sender, System.EventArgs e)
    {
    Session.Add("id",0);
    Response.Redirect( "webform2.aspx" );
    }
    第二个页面
    webform2.aspx
    private void Page_Load(object sender, System.EventArgs e)
    {
    if( (int)(Session["id"] ) ==0)
    {
    Response.Write("ok");
    }
    }
    测试结果是有"ok"
    那你说的
    "这个代码的作用是通过一个特殊的http标头信息指示客户端浏览器重定向,而asp.net中的Session对象和Cookie对象在赋值操作时后面如果跟Response.Redirect这样的方法时,服务器无法对Session对象和Cookie对象进行操作"是不是有问题!
      

  12.   

    在页面的头上加上<%@ OutputCache Duration="1" VaryByParam="*" %>试试,可能是页面缓存的关系吆!