当前位置:编程学习 > C#/ASP.NET >>

WebBrowser的问题

我做了一个cs程序通过webBrowser控件登陆进bs管理系统。进入系统后,点击链接弹出1个ie浏览器,但是ie里的bs系统就会提示系统超时了。我用的session保存用户信息,请问该怎么解决这个问题? --------------------编程问答-------------------- 在线等,帮帮忙!! --------------------编程问答-------------------- 弹出一个新的ie,就属于不同的回话了,session也就不同了,要先试下在ie中是不是也会出现超时,如果超时,就是系统的问题,如果没有超时,试试下面的,让弹出的窗口都在webbrowser中显示
private void webBrowser_NewWindow(object sender, CancelEventArgs e)
        {
//打开新窗口的方式是在已有的窗口内打开
            webBrowser.Url = new Uri(((WebBrowser)sender).StatusText);
            e.Cancel = true;
        } --------------------编程问答-------------------- 建议你是用客户端的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 --------------------编程问答-------------------- 屏蔽弹出新窗体。这个问题以前有人问过 --------------------编程问答-------------------- 我的目的就是弹出新的ie浏览器并且系统的session还有效。  
我做测试了,打开两个ie浏览器,一个成功登陆,另一个再访问系统,session还是有效的。
可是如果是通过webbrowser打开的新ie浏览器就不可以 --------------------编程问答-------------------- 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) --------------------编程问答-------------------- --------------------编程问答--------------------
引用 6 楼 jshi123 的回复:
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)
+1.结贴吧
补充:.NET技术 ,  C#
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,