Отправка файлов cookie из приложения C # во всплывающее окно Internet Explorer - PullRequest
1 голос
/ 10 июня 2009

У меня есть приложение C #, которое имеет ссылки на определенные функции в веб-приложении, которое использует те же учетные данные для входа. Если пользователь вошел в систему с помощью приложения и щелкнул ссылку, откроется новое окно браузера (обычно IE, но может быть только браузером по умолчанию) и попросит их снова пройти аутентификацию.

Есть ли способ заставить учетную запись оставаться в системе, независимо от того, находится ли она в приложении C # или в отдельном окне браузера? Веб-приложение использует файлы cookie для хранения переменных сеанса пользователей для аутентификации, приложение C # имеет ту же информацию о сеансе, но не в файле cookie.

По сути, мне нужно создать файл cookie из информации о сеансе приложения C # и передать его в новое окно браузера.

Есть идеи?

Ответы [ 3 ]

1 голос
/ 25 января 2010

Я полагаю, что любой новый экземпляр окна начнет новый сеанс и, следовательно, удалит все файлы cookie сеанса, которые вы, возможно, создали до открытия нового браузера через Process.Start("iexplorer.exe", "www.msn.ca") или webBrowser1.Navigate("www.msn.ca", true).

Однако я наконец нашел способ обойти эту проблему. Это включает в себя следующее:

  1. Создайте свой собственный веб-браузер, который будет выглядеть почти так же, как Internet Explorer. Посмотрите следующую ссылку для кода для основного браузера и настройте его по мере необходимости.

    http://msdn.microsoft.com/en-us/library/ms379558(VS.80).aspx

    Я исправил ошибку, заменив устаревший RaftingStrip на ToolStrip, ToolStripContainer. (Напишите мне, если вы хотите этот отлаженный код. Я опубликую его, но я думаю, что он слишком длинный для этого форума.)

    Для себя я добавил

    1. конструктор для передачи целевого URL, установки его в адресную строку, установки в качестве домашней страницы и передачи маркера безопасности

    2. свойства для включения / отключения адресной строки и панелей поиска

    3. добавлены кнопки «Вырезать», «Копировать», «Вставить», «Сохранить как» и «Печать»

    4. изменил значок прогресса с "C #" на песочные часы

  2. В разделе объявления формы веб-браузера добавьте

    DllImport("wininet.dll", CharSet = CharSet.Auto, SetLastError = true)]
    public static extern bool InternetSetCookie(string lpszUrlName,
             string lbszCookieName, string lpszCookieData);
    
  3. В веб-браузере загрузите форму и Create_a_new_tab (), прежде чем webpage.Navigate () вставьте строки ниже, которые сохраняют токен в файле cookie сеанса. (Это также может потребоваться для событий button_go_click и button_search_click при переходе на новый домен. Лично я бы отключил панели адреса и поиска при передаче токена безопасности.)

    string url = comboBox_url.Text.Trim();  // write the session cookie
    string security_token = "my_session_id=12345" // should have been passed to constructor
    InternetSetCookie(url, null, security_token);
    

Пользователь никогда не узнает разницу, и вы можете контролировать, какие функции включить / выключить или реализовать.

1 голос
/ 20 января 2010

Я смог сделать это только для встроенного элемента управления WebBrowser (см. Код ниже), но НЕ для нового окна IE. Все еще не нашли ответ.

[DllImport("wininet.dll", CharSet = CharSet.Auto, SetLastError = true)]
public static extern bool InternetSetCookie(string lpszUrlName, string lbszCookieName, string lpszCookieData);

string url = "http://www.google.com";

// write the session cookie
InternetSetCookie(url, null, "abc=1");

webBrowser1.Navigate(url);
0 голосов
/ 10 февраля 2010

Вы можете использовать обычный режим сеанса.

например:

Session.Add("<sessionName>", <variable which contains the session data>>

Если вы хотите сохранить имя пользователя в переменной с именем «Пользователь», вы можете использовать следующий код:

Session.Add("UserName", User);

Чтобы подтвердить эту сессию на своей веб-странице, используйте приведенный ниже код под методом page_lad.

if(Session["UserName"] != null)
{
   ********
}
else
{
   ******* (you can redirect to your home page...)
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...