我对 WebBrowser 控件和 cookie 有疑问。
首先,当人们在普通的 Web 浏览器(在我的例子中是 IE9)中导航时会发生什么:
1.1.我打开网页http://www.gmail.com http://www.gmail.com.
我输入我的用户名/密码,
我留下复选框“保持登录" 未经检查的并点击“Sign in",
IE9 打开我的 GMail 页面,其中列出了我的所有邮件。那没问题。
1.2.在GMail页面的顶部有很多链接,如“日历”、“文档”等。
当我单击“文档”链接时,我的文档页面将在 IE9 中的单独选项卡中打开。无需询问名称/密码等额外登录信息。这也很好。
现在,当我在 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 登录信息(名称和密码),
2.3.当我单击“文档”链接时,将打开 IE9 的新实例,
2.4. Google 没有显示我的文档列表,而是要求我在 IE9 窗口中再次登录。为什么?为什么我必须再次输入我的凭据?
我认为 cookie 有问题,它们在步骤 2.2 中设置不正确。您是否知道哪里出了问题以及必须采取哪些措施才能正确设置 cookie?
提前致谢,
Sal
附加信息:
我的 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 页面时重用。