我做了一个cs程序通过webBrowser控件登陆进bs管理系统。进入系统后,点击链接弹出1个ie浏览器,但是ie里的bs系统就会提示系统超时了。我用的session保存用户信息,请问该怎么解决这个问题?

解决方案 »

  1.   

    弹出一个新的ie,就属于不同的回话了,session也就不同了,要先试下在ie中是不是也会出现超时,如果超时,就是系统的问题,如果没有超时,试试下面的,让弹出的窗口都在webbrowser中显示
    private void webBrowser_NewWindow(object sender, CancelEventArgs e)
            {
    //打开新窗口的方式是在已有的窗口内打开
                webBrowser.Url = new Uri(((WebBrowser)sender).StatusText);
                e.Cancel = true;
            }
      

  2.   

    建议你是用客户端的cookie来存储数据如果支持的话
    新接到一个活,让多个新开的IE之间共享Session
    好像对于Cookie来说,这是很容易实现的,而且在各大网站上,没有看到他们需要让Session在多个新开的IE中共享以下是自己在网上找到的办法http 是无状态的协议,就是在用户浏览不同的网页之间不保存用户信息
    但是后来的发展需要 http 在网页之间传递某些信息,所以出现了三种方式:1。传递参数,就是在 网页后加参数: http://link?name=cinc
    2。利用 cookie,把用户信息存放在 用户本地的机器上
    3。利用 session 把用户信息存放在服务器
         每个 session 有一个 session id
         session id 可以存放在两个地方:
           1) 如果客户端支持 cookie,就把 session id 存放在 客户端的 cookie 里
           2) 如果客户端不支持 cookie ,就把 session id 作为参数在网页间传递,就是我们常看到的:http://link?jsessionid=jfdkjfkdjfdf说一点儿自己的理解,首先,IE和其他的多窗口浏览器相比其他的多窗口浏览器的Tab之间是可以共享Session的,而新开的IE(指双击桌面上的图标打开的),是不能共享Session的Session实现共享,是因为共享的进程都获得了SessionID,这个SessionID是随机生成的,当你新开IE窗口时,已经得不到这个SessionID
      

  3.   

    我的目的就是弹出新的ie浏览器并且系统的session还有效。  
    我做测试了,打开两个ie浏览器,一个成功登陆,另一个再访问系统,session还是有效的。
    可是如果是通过webbrowser打开的新ie浏览器就不可以
      

  4.   

    ie和webbrowser控件是不同的东西,它们的session不能共享。
    要么在WebBrowser里浏览新的窗口,要么一开始就对IE进行操作。在webbrowser里打开弹出页面的方法: var ie = (SHDocVw.WebBrowser_V1)webBrowser1.ActiveXInstance;
    ie.NewWindow += (string URL, int Flags, string TargetFrameName, ref object PostData, string Headers, ref bool Processed) =>
    {
    Processed = true;
    webBrowser1.Navigate(URL);
    };程序一开始就找到或打开ie窗口的方法: // 找到已经打开的ie窗口
    var ie = new SHDocVw.ShellWindows().OfType<SHDocVw.InternetExplorer>()
    .FirstOrDefault(w => Path.GetFileName(w.FullName).ToLower().StartsWith("iexplore")); // 或者新建ie窗口
    SHDocVw.InternetExplorer ie = new SHDocVw.InternetExplorer();上面的方法都要先添加引用COM组件:SHDocVw(Microsoft Internet Controls)