【发布时间】:2012-03-26 12:47:45
【问题描述】:
我的 WebBrowser 控件和 cookie 有问题。
首先,当一个人在普通的 Web 浏览器(在我的例子中是 IE9)中导航时会发生什么:
1.1。我打开网页http://www.gmail.com。
我输入我的用户名/密码,
我保留复选框“保持登录”未选中,然后点击“登录”,
IE9 打开我的 GMail 页面,其中列出了我的所有邮件。没关系。
1.2。 GMail 页面顶部有很多链接,如“日历”、“文档”等。
当我单击“文档”链接时,我的文档页面会在 IE9 的单独选项卡中打开。不询问名称/ psw 等其他登录信息。这个也不错。
现在,当我在 WebBrowser 控件中重复所有这些时会发生什么(我创建了一个非常简单的 VB.NET 应用程序,其中包含一个 WebBrowser 控件)。
2.1。在表单加载事件中,执行以下代码:
Private Sub MyForm_Load(sender As System.Object, e As System.EventArgs)
Me.MyWebBrowser.Navigate("http://www.gmail.com")
End Sub
2.2。我在 WebBrowser 控件中输入我的 GMail 登录信息(名称和 psw),
2.3。当我单击“文档”链接时,会打开一个新的 IE9 实例,
2.4。 Google 没有显示我的文档列表,而是要求我在 IE9 窗口中再次登录。为什么?为什么我必须再次输入我的凭据?
我认为 cookie 有问题,它们在步骤 2.2 中设置不正确。您知道什么是错误的吗?必须做些什么才能正确设置 cookie?
提前致谢,
萨尔
附加信息:
我的 WebBrowser NewWindow 事件函数实现为:
Private Sub MyWebBrowser_NewWindow(sender As System.Object, e As System.ComponentModel.CancelEventArgs) Handles MyWebBrowser.NewWindow
Dim CookiesArr As String() = MyWebBrowser.Document.Cookie.Split(";")
For Each Cookie In CookiesArr
Dim Idx As Long = Cookie.IndexOf("=")
If Idx <> -1 Then
Dim CookieName As String = Cookie.Substring(0, Idx).Trim
Dim CookieValue As String = Cookie.Substring(Idx + 1).Trim
InternetSetCookie("http://www.google.com", Nothing, CookieName + " = " + CookieValue + "; expires = Sat,05-Jan-2013 00:00:00 GMT")
End If
Next
End Sub
我认为 InternetSetCookie() 方法应该将 cookie 永久存储在“C:\Users\Administrator\AppData\Roaming\Microsoft\Windows\Cookies”目录中,以便在打开需要授权的 Google 页面时重复使用。
【问题讨论】:
标签: vb.net cookies webbrowser-control