UserLogin.aspx登录成功后  保存Session如下 
 
Session.RemoveAll();
Session["UserCode"] = checklogin.usercode;
Session["UserName"] = checklogin.username;
然后就打开新页面并关闭当前页面
Response.Write("<script language='javascript'>w=window.open ('ProgramFolder/LoginDefault.aspx', '_blank',status=no,titlebar =no');w.moveTo(0,-25);w.resizeTo(screen.width,screen.height); </script>");  //打开新页面
Response.Write("<script>window.close();</script>");       //关闭当前页面注意这里用的是Response.Write而不是Response.Redirect  我不知道是不是问题就出在这里然而我在另一个页面第一次打开的时候 总是说“未将对象引用设置到对象的实例”
错误提示在这里
DataTable TableMyInceptList = getmyinceptlist.GetMyInceptList(Session["UserCode"].ToString());   //显然是Session的原因但是当我第二次进入系统  一切正常   这是怎么回事哇????

解决方案 »

  1.   

    可能是弹出窗口 Session丢失的问题,看一下你的ie设置, 安全,自定义级别 最后一项
    自动使用当前用户名和密码登录另外,在所有使用Session中的对象前,要判断一下是否为 null
    ____________________________
    (2005年04月26日 14时50分23秒)
      

  2.   

    那为什么第二次登录就没有问题了呢 反正第一次登录没有Session   我已经试过了等我按程序页面上的注销  回到登录页  第二次登录就有了怪事啊   急死我了  5555555555555...................
      

  3.   

    Session["UserCode"] = checklogin.usercode;
    这里赋值的时候是不是有点太直接了!应该先判断一下,Session["UserCode"]是否存在,如果不存在,需要用Session.add()添加,否则这个对象就不存在,赋值也会失败!
      

  4.   

    每一次登录   都是在UserLogin.aspx登录成功进入LoginDefault.aspx
      

  5.   

    改为 Redirect 试试?
    ____________________________
    (2005年04月26日 15时07分24秒)
      

  6.   

    事实上   我做的登录页面是这样子的给用户的地址是Default.aspx   加载Default.aspx时   弹出登录对话框UserLogin.aspx(这是一个网页对话框)因此用户实际看到的其实是我的UserLogin.aspx(Default.aspx他不可能看到)成功即进入LoginDefault.aspx (这是个框架页  左边为菜单  上有:当前登录用户:这里就要取得Session的值)注销按钮的连接地址是Default.aspx  即又重新加载Default.aspx---->UserLogin.aspx
      

  7.   

    我不知道我叙述清楚了没有  现在的问题基本上就是  怎么让弹出窗口的Session不丢失呀?我现在系统框架已经定型了  若要改动的话  基本上  时间来不及啦   怎么让弹出窗口的Session不丢失呀?急死我了555555555555555.....................男儿有泪不轻弹只因未到火烧眉毛处~~~~
      

  8.   

    回复人: cpp2017(幕白兄(想换工作或兼职[email protected])) ( ) 信誉:100  2005-04-26 15:07:00  得分: 0  
     
     
       改为 Redirect 试试?
    ____________________________
    (2005年04月26日 15时07分24秒)
      
     
    ---------------------------------------------------cpp2017(幕白兄)  那样的话  要对系统的架构进行大的改动  时间来不及呀  55555555...........
      

  9.   

    这是一个典型的弹出窗口Session丢失的问题因为你的注销是在弹出窗口里面的,所以第二次登录实际上是弹出窗口中登录的可以这样:在Default.aspx中直接弹出窗口 显示 UserLogin.aspx window.open("UserLogin.aspx","","参数");
    window.opener = null;
    wndow.close();
    登录后,Redirect到 LoginDefault.aspx
    ____________________________
    (2005年04月26日 15时22分38秒)
      

  10.   

    cpp2017(幕白兄) 我的Default.aspx加载是  是这样的<script language="javascript">
    <!--
    var w_width=300,w_height=180;  //系统登陆窗口的高宽function startLogin(url)
    {
    window.showModalDialog(url,"window","dialogHeight: "+w_height+"px; dialogWidth: "+w_width+"px; help: Yes; resizable: No; status: No;");
    }function window_onload()   //加载登录窗口
    {
       window.moveTo(-3000,-3000);
      startLogin("Login.aspx?UserLogin.aspx");
      opener=null;
      window.close();
    }
    //-->
    </script>跟您的意思基本上 差不多吧   
      

  11.   

    没错,就是这个意思
    但你的url好像应该是UserLogin.aspx你写成了   "Login.aspx?UserLogin.aspx" ?
    ____________________________
    (2005年04月26日 15时40分52秒)
      

  12.   

    可用脚本传值,url传值
    但这都不安全另外还可以用cookies传值
    ____________________________
    (2005年04月26日 15时46分43秒)
      

  13.   

    回复人: cpp2017(幕白兄(想换工作或兼职[email protected]))  
     
    可用脚本传值,url传值
    但这都不安全另外还可以用cookies传值
    _____________________________________________________________
    cookies???  怎么传??  给段代码看看  或者给我个例子看看好么?
      
     
      

  14.   

    先把Session.RemoveAll();拿掉
    確定Session["UserCode"] 在彈出前確定有值嗎?
      

  15.   

    var now = new Date();
    var expireDate = new Date(now.getFullYear()+1,10,1);
    document.cookie = "UserFontStyle=" + escape(a) +";expires=" +now.toDateString();
    //document.all.txtSend.focus();
      
     
      //?áè?cookμ?×?ì?éè??   
      function GetCookStyle()
      {
    var style =document.cookie;
    var ary = style.split(";");
    var css = ""; //ò?±£′?μ?css
    for(var i = 0;i<ary.length;i++)
    {
    if(ary[i].split("=")[0] == "UserFontStyle")
    {
    css = ary[i].split("=")[1];
    break;
    }
    }
    return unescape(css);
      }
    ____________________________
    (2005年04月26日 16时02分14秒)
      

  16.   

    cpp2017(幕白兄)你的代码里的注释怎么是乱码?还有   你是怎么保存UserCode和UserName的?  我没怎么看明白   &-_-&
      

  17.   

    怎么保存UserCode和UserName的?  我是这样取的(原来的代码)Session["UserCode"] = checklogin.usercode;
    Session["UserName"] = checklogin.username;别的页面又要怎么才能取的checklogin.usercode和checklogin.username这两个值啊
      

  18.   

    Session["UserCode"] = checklogin.usercode;-->請確定Session["UserCode"]是否有值
    如果有值,別的頁面就可以直接取Session["UserCode"]
      

  19.   

    楼上的GG第一次登录时Session["UserCode"] 没有啊 第二次登录  Session["UserCode"] 是上一次登录时保存的Session["UserCode"] 啊如果我换了用户的话  比如  第一次用001  第二次用002  那第二次登录的Session["UserCode"]其实是001啊
      

  20.   

    我認為:既然001登錄,那麽就要將它記入一個Session["UserCode"],別的頁面才可以通過Session["UserCode"]來認001
    可以告訴我:為什麽要摒棄第一次登錄者呢?
      

  21.   

    每個登錄者在每次登錄時都會産生一個唯一的SESSIONID,不管它打開這個網站的幾個頁面,直到它關閉或者timeout結束為止,SESSIONID一直是IIS對它的識別碼
    按你所述如果001登錄時會産生一個SESSIONID,002登錄時也會産生一個SESSIONID,它們是不一樣的
    如果你要記錄每一次的登錄者以便在下次登錄時自動進入或者顯現帳號就可以利用COOKIES
      

  22.   

    楼上的GG   现在问题的关键是我的登录成功进入的页面是个弹出页面啊弹出页面的Session要丢失怎么办?
      

  23.   

    讨厌的CSDN  回复总是要报错误   唉
      

  24.   

    那就是要你看彈出前SESSION是否有值,如果有值且TIMEOUT是否夠長,彈出後SESSION就不會丟啊
      

  25.   

    事实上是  弹出的瞬间   Session就没了   怎么办??据楼上的几位GG所言弹出窗口Session是要丢失滴
      

  26.   

    Session_Start中先设置  Session["UserCode"]=""  Session["UserName"] =""
    试试!
      

  27.   

    改用Response.Redirect  來開啟,我是用Response.Redirect就沒有丟失
      

  28.   

    会不会是GetMyInceptList的原因,建议

    DataTable TableMyInceptList = getmyinceptlist.GetMyInceptList(Session["UserCode"].ToString()); 
    改为
    Response.Write("==" + Session["UserCode"].ToString() + "==");
    重新登录,如果没问题,那就是GetMyInceptList函数本身有问题。
      

  29.   

    dim userid_t as string =checklogin.userid
    dim userpw_t as string =checklogin.userpw
    Session["UserID"]=userid_t;
    Session["UserPW"]=userpw_t;
    可以试试用Response.Redirect(...)
    或者:
    dim strReq as string 
    dim strUrl as string 
    strReq ="UserID=" & userid_t & "&UserPW=" & userpw_t
    strUrl = me.toQueryString("目标页名称", "目标页面地址", strReq)
    Response.Write("<script language=""JavaScript"" for=""window"" event=""onload"">var Dst=showModalDialog(strUrl& "','','dialogWidth:1024px;dialogHeight:768px;dialogTop:0px;dialogLeft:0px;resizable:yes;scroll:no;status:no;help:no;edge:raised;unadorned:no')</script>")
    这样就可以把userid_t和userpw_t传到目标页面,但是目标页面需要解码
    在目标页面:
    server.UrlDecode(request.QueryString("UserID"))就可以得到userid_t
    然后再目标页面中用<script language='JavaScript'>windows.retrunevalue="你想传回给调这页面的页面的值"</script>
    当回到开始页面的时候变量Dst就接收到返回值,当然Dst可以自己换成一个控件,只要是能接收对应数据的变量就行
    这样就可以保证页面之间的控制
    当一个页面调其它页面,并且这2个页面在一个工程的时候我们用Session,当不再一个工程的时候用Request
    你可以看看自己的程序,不行就不必要用Session来保存值了,可以传给一个页面然后再传回来,当然这样比较慢!
      

  30.   

    TO:  zhangaipl(烟酒僧)   试过  还是要丢失  :(TO:  dragonforfly(飘零)  试过  失败!      :(TO:  daisylh(婁子) 改为Response.Redirect肯定没问题  
         不过那样的话 我的很多页面(四十几个)都要做相应的调整  
         可能时间上来不及啦TO:  wanna51(wanna)  已检查 确实是Session的原因  函数没有问题TO:zrlwoaini(精益求精)  你的方法可以参考 谢谢TO: another GG  可否以简单的cookie或者viewstate方式解决???只要能保存下我在登录页的用户编号和用户名称(UserCode UserName)  均可
      

  31.   

    没看明白。我特意做了三个页面试了一下,没有丢失Session呀!看看是不是这样:
    在文件 default.aspx 中:<head>
    ..........
    <!--
    var w_width=300,w_height=180;  //系统登陆窗口的高宽function startLogin(url)
    {
    window.showModalDialog(url,"window","dialogHeight: "+w_height+"px; dialogWidth: "+w_width+"px; help: Yes; resizable: No; status: No;");
    }function window_onload()   //加载登录窗口
    {
       window.moveTo(-3000,-3000);
      startLogin("UserLogin.aspx");
      opener=null;
      window.close();
    }
    //-->
    </script>  </head>
      <body MS_POSITIONING="GridLayout" onload="window_onload()">
      <form ....................
    ..................  
    在程序 UserLogin.aspx 中提交页面的控件的事件中: Session.RemoveAll();
    Session["UserCode"] ="输入UserCode";
    Session["UserName"] ="输入UserName";
    Response.Write(@"<script language='javascript'>
                 w=window.open ('WebForm2.aspx', '_blank','status=no,titlebar =no');
                 w.moveTo(0,-25);
                 w.resizeTo(screen.width,screen.height); 
                 </script>");  //打开新页面
    Response.Write("<script>window.close();</script>");       //关闭当前页面然后在WebForm2.aspx 的页面 Load 事件中打印Session, 打印的值完全正确!
      

  32.   

    TO:  sp1234() 在你的WebForm2.aspx中加个框架页Frame再试试  呵呵
      

  33.   

    <body MS_POSITIONING="GridLayout">
    <form id="Form1" method="post" runat="server">
    <FONT face="宋体"></FONT>
    <iframe src="WebForm3.aspx" height=500 width=500></iframe>
    </form>
    </body>在 WebForm3.aspx的页面Load输出Session,正常。在Form2和内嵌的Form3上都打印出Session值。
      

  34.   

    sp1234()  你确信?? 请问你什么操作系统? 打了什么补丁?  用的什么IE版本? IIS什么版本?
      

  35.   

    WebForm2.aspx 改成这样了:<HTML>
    <HEAD>
    <title>WebForm2</title>
    <meta name="GENERATOR" Content="Microsoft Visual Studio .NET 7.1">
    <meta name="CODE_LANGUAGE" Content="C#">
    <meta name="vs_defaultClientScript" content="JavaScript">
    <meta name="vs_targetSchema" content="http://schemas.microsoft.com/intellisense/ie5">
    </HEAD>
    <frameset cols="50%,*">
    <frame src="WebForm3.aspx">
    <frame src="about:blank">
    </frameset>

    </HTML>WebForm3.aspx 还是正确取到Session了。我的机器比你的听话。
      

  36.   

    sp1234()  不是吧  我整理一下思路我明天重新发个帖子 专门讨论这个问题  可能是我们的环境不一样我这个ID没可用分啦5555.....记得明天光顾我的帖子哟  我会邀请你去看滴