Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: Проблемма с сессией и куки  (Прочитано 11296 раз)
0 Пользователей и 1 Гость смотрят эту тему.
USBLexus
Опытный

ru
Offline Offline
Пол: Мужской
Кот рыжий


« : 17-03-2008 11:29 » 

Всем доброго времени суток!

Есть сайт на ASP.NET в странице есть фрейм, который ссылается на WPF страничку XBAP на которой лежит кнопочка. XBAP лежит на том же сайте что и ASP.NET сайт. XBAP ясен перец выполняется на стороне клиента. При нажатии на кнопочку XBAP (который работает на стороне клиента) пытается с помощью WebService получить данные от ASP.NET Service который лежит там же где и сайт. Код выглядит вот так:

                WSTestWebService.TestWebService srvc = new WSTestWebService.TestWebService();

                //Пытаемся запихать в сервис кукесы
                string cookieHeader2 = Application.GetCookie(new Uri("http://mySite/myPage.aspx"));
                string[] cookies = cookieHeader2.Split(new char[] { ';' });
                srvc.CookieContainer = new CookieContainer();
                if (cookies != null && cookies.Length > 0)
                    foreach (string s in cookies) {
                        string[] vals = s.Split(new char[] { '=' }, 2);
                        if (vals != null && vals.Length > 1) {
                            Cookie cook = new
                                Cookie(
                                vals[0].Replace(" ", null).Replace("\t", null).Replace("\r", null).Replace("\n", null).Replace("=", null).Replace(";", null).Replace(",", null),
                                vals[1].Replace(";", null).Replace(",", null));
                            MessageBox.Show(cook.Name + "-------" + cook.Value);
                            cook.Path = "/";
                            srvc.CookieContainer.Add(new Uri(srvc.Url), cook);
                        }
                    }

                srvc.Credentials = CredentialCache.DefaultCredentials;
                label1.Content = srvc.HelloWorld();

Проблема вот в чем: Клиент заходит на ASP.NET сайт, проходит авторизацию, открывает окошко с фреймом в котором лежит многострадальный XBAP, нажимает на кнопочку, XBAP обращается к сервису на сайт, но сайт думает что авторизация не пройдена и редиректит на страницу авторизации. Добрые люди сказали что нужно скопировать куки из канала ASP страницы в канал сервиса, я вроде скопировал (см. код выше), но толи так криво скопировал, толи еще что, сервер редиректит вызов метода из вебсервиса на страницу авторизации. С ума сойти...

Веб сервис выглядит так:

using System.Web.Services;

/// <summary>
/// Summary description for TestWebService
/// </summary>
[WebService(Namespace = "http://tempuri.org/")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
public class TestWebService : WebService {

    [WebMethod(Description = "Запрос данных", EnableSession = true)]
    public string HelloWorld() {
        return "Hello World";
    }
}
Записан

#define QUESTION(b) (2*b)||(!(2*b)) (c) William Shakespeare
RXL
Технический
Администратор

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #1 : 17-03-2008 19:08 » 

USBLexus, посмотри о куки: https://club.shelek.ru/viewart.php?id=264 (начиная со слов "Вернемся к Куки и сессии."). Т.к. отсылкой куки занимается клиент, то от языка логика не зависит.
Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.

"железокаменный метеорит" мог образоваться от расплавления металлических конструкций в результате например ядерного взрыва и стекания жидкого железа в какой нибудь щебень (c) Иванов С.
USBLexus
Опытный

ru
Offline Offline
Пол: Мужской
Кот рыжий


« Ответ #2 : 18-03-2008 11:12 » 

Почитал, расширил кругозор, интересная статья, спасибо!
Самое интересное что поставил только что FireFox а там мой код работает, но не работает в IE7, все описанные выше проблемы возникают только в IE7
Записан

#define QUESTION(b) (2*b)||(!(2*b)) (c) William Shakespeare
RXL
Технический
Администратор

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #3 : 18-03-2008 18:06 » 

USBLexus, погоди, тема о серверном asp.net? Причем тогда браузер?
Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.

"железокаменный метеорит" мог образоваться от расплавления металлических конструкций в результате например ядерного взрыва и стекания жидкого железа в какой нибудь щебень (c) Иванов С.
USBLexus
Опытный

ru
Offline Offline
Пол: Мужской
Кот рыжий


« Ответ #4 : 19-03-2008 05:47 » 

Ну я сам пока не сильно в теме, только начинаю разбираться, но судя по всему разные браузеры с куки работают по разному
Записан

#define QUESTION(b) (2*b)||(!(2*b)) (c) William Shakespeare
USBLexus
Опытный

ru
Offline Offline
Пол: Мужской
Кот рыжий


« Ответ #5 : 20-03-2008 04:02 » 

Посмотрел трафик снифером, HTTP запрос вызова веб сервиса из XBAPа передается без куки, хотя я куки заполнил (см. код выше), не могу победить(((
Записан

#define QUESTION(b) (2*b)||(!(2*b)) (c) William Shakespeare
Sla
Команда клуба

ua
Offline Offline
Пол: Мужской

WWW
« Ответ #6 : 20-03-2008 08:03 » 

а сами куки есть?
если в ФФ работает, значит куки сохраняются
а в ИЕ?
Записан

Мы все учились понемногу... Чему-нибудь и как-нибудь.
USBLexus
Опытный

ru
Offline Offline
Пол: Мужской
Кот рыжий


« Ответ #7 : 20-03-2008 08:58 » 

Нашел ошибку куки привязывались на другой адрес поэтому IE их не видел, поправил код теперь куки есть, только вот не пойму - судя по сниферу с одним и тем же кодом, когда конектишься через FireFox в куки есть Id сессии, когда конектишься через ie куки точно такие - же как у фф, только без Id сессии((( Поэтому ASP сайт редиректит на логинпейдж, понять не могу почему ie съедает id сессии в куки...
Записан

#define QUESTION(b) (2*b)||(!(2*b)) (c) William Shakespeare
RXL
Технический
Администратор

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #8 : 20-03-2008 10:42 » 

USBLexus, процесс такой:

1. Клиент обращается первый раз или куки было просроченное и клиент его удалил.

Запрос: без куки.
Ответ: сервер сообщает куки.

2. Нормальный процесс, когда куки есть и не просроченное.

Запрос: передается ранее полученные куки.
Ответ: без упоминания куки.

3. Процесс, когда куки есть, но сервер посчитал, что его надо удалить (например logout)

Запрос: передается ранее полученные куки.
Ответ: удаление куки.

Это все на уровне HTTP + серверное ПО.
« Последнее редактирование: 20-03-2008 10:44 от RXL » Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.

"железокаменный метеорит" мог образоваться от расплавления металлических конструкций в результате например ядерного взрыва и стекания жидкого железа в какой нибудь щебень (c) Иванов С.
USBLexus
Опытный

ru
Offline Offline
Пол: Мужской
Кот рыжий


« Ответ #9 : 20-03-2008 11:09 » 

В общем как мне удалось выяснить id сессии это protected куки и разные браузеры работают с ним по разному. Не знаю правильно это или нет, создал обычный куки на сервере, в него положил Id сессии, на клиенте смотрю пришел ли ASP.NET_session_id, если не пришел то просто переименовываю свой куки в ASP.NET_session_id и отправляю на сервер вместе с сервисом.
Извратно конечно, но зато работает и в фф и в ие
Записан

#define QUESTION(b) (2*b)||(!(2*b)) (c) William Shakespeare
RXL
Технический
Администратор

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #10 : 20-03-2008 21:08 » 

USBLexus, в протоколе нет понятия "id сессии". Есть только cookie и их может быть несколько штук сразу, и каждое cookie может иметь свои настройки домен/путь/ttl/защита.

Если и есть какие-либо зависимости, то ищи их в самом ASP.
« Последнее редактирование: 20-03-2008 21:10 от RXL » Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.

"железокаменный метеорит" мог образоваться от расплавления металлических конструкций в результате например ядерного взрыва и стекания жидкого железа в какой нибудь щебень (c) Иванов С.
Dimka
Деятель
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #11 : 27-03-2008 11:21 » 

Странная тема. Браузеры, сервисы, сайты, куки...

Начинать надо с архитектуры всей этой системы.

Как я понял:
1) Есть клиент (браузер), обращающийся к сайту.
2) Сайт авторизует подключившегося к нему клиента.
3) Сайт (ASP.NET) выдаёт фрейм, в котором запускается XBAP.
4) XBAP обращается к веб-сервису.

Где авторизация пользователя в XBAP?
Где авторизация XBAP, обращающегося к веб-сервису?

Пользователь авторизуется "сквозным" образом во всех взаимодейтсвующих частях или только на frontend-сайте, нужна ли аутентификация пользователя в XBAP и веб-сервисе? Если нужна, как обеспечить автоматическую передачу аутентификационной информаци от frontend-сайта к другим частям системы?

Вот когда это всё разрешится, тогда станет понятна роль cookie и всего прочего, а также существенные особенности браузеров.
Записан

Программировать - значит понимать (К. Нюгард)
Невывернутое лучше, чем вправленное (М. Аврелий)
Многие готовы скорее умереть, чем подумать (Б. Рассел)
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines