Контроль WebBrowser и куки - PullRequest
       16

Контроль WebBrowser и куки

3 голосов
/ 09 марта 2012

У меня проблема с управлением веб-браузером и файлами cookie.

Прежде всего, что происходит, когда пользователь перемещается в обычном веб-браузере (в моем случае 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)<br> Me.MyWebBrowser.Navigate("http://www.gmail.com")<br> End Sub

2.2.Я ввожу свою регистрационную информацию GMail (имя и psw) в элемент управления WebBrowser,

2.3.Когда я нажимаю ссылку «Документы», открывается новый экземпляр IE9,

2.4.Вместо того, чтобы показывать список моих документов, Google просит меня снова войти в окно IE9.Зачем?Почему я должен снова вводить свои учетные данные?

Я думаю, что что-то не так с куки-файлами, и они неправильно настроены на шаге 2.2.У вас есть какие-либо идеи, что не так и что нужно сделать, чтобы правильно установить куки?

Заранее спасибо,
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, требующей авторизации.

Ответы [ 2 ]

1 голос
/ 10 марта 2012

это потому, что элемент управления веб-браузера открывает вашу ссылку в отдельном окне IE9, верно? Если вы откроете его или откроете в другом окне управления веб-браузера в программе Winforms или в том же окне, в котором вы щелкнули ссылку, она должна работать правильно.

Они используют файлы cookie сеанса (в памяти) для хранения вашей регистрационной информации, а не записи, записанной на жесткий диск, поэтому при запуске другого процесса информация (в файлах cookie сеанса памяти) отсутствует или распространяется к новому процессу.

Итак, чтобы перехватить нажатие ссылки и открыть ее в выбранном вами wb-окне, вам необходимо перехватить событие newwindow, отменить навигацию и отредактировать с помощью .navigate на wb по вашему выбору, если вам нужна помощь с этим разрешением я знаю, но есть много онлайн.

Кроме того, имейте в виду, что элемент управления веб-браузера по умолчанию использует IE7, даже если у вас установлен IE9, это можно изменить через реестр.

0 голосов
/ 31 марта 2012

Попробуйте добавить это:

Private Declare Function InternetSetCookie Lib "wininet.dll" Alias "InternetSetCookieA" (ByVal lpszUrlName As String, ByVal lpszCookieName As String, ByVal lpszCookieData As String) As Boolean
...