AXForum  
Вернуться   AXForum > Microsoft Dynamics AX > DAX: Программирование
All
Забыли пароль?
Зарегистрироваться Правила Справка Пользователи Сообщения за день Поиск

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 10.04.2012, 19:46   #1  
trud is offline
trud
Участник
Лучший по профессии 2017
 
1,039 / 1630 (57) ++++++++
Регистрация: 07.06.2003
Записей в блоге: 1
Узнать уникальный код сеанса для web сессии
Иногда требуется сохранять какие-то уникальные данные для сессии пользователя. В windows клиенте используют фукнцию sessionid(), которая возвращает код сеанса.

Столкнулся с необходимостью сделать аналогичный фукнционал на web портале 2009. Проблема в том, что для web пользователя код сеанса(возвращаемое значение sessionid()) меняется спустя несколько десятков секунд простоя в браузере. т.е. когда вы что-то нажали, подождали секунд 30, потом опять что-то нажали, код сеанса уже будет другой(соответственно и поменяется в форме активных пользователей)
Вопрос в том - что можно использовать вместо sessionid() для web клиента?
Старый 11.04.2012, 01:00   #2  
BOAL is offline
BOAL
Участник
Аватар для BOAL
MCBMSS
Злыдни
1C
Лучший по профессии 2015
 
621 / 453 (17) +++++++
Регистрация: 28.04.2003
Адрес: Москва
Грабли такие были, как обходили уточню у разработчика.

Если задача сессии - хранение данных для активного пользователя (настройки, код подтверждения авторизации и т.п.), то замена хранению данных в сессии - это:
1. кукисы (несекьюрно)
2. хранение массива данных в файле (ХМЛ или сеарилизованном) по коду юзера или всех в кучу
Старый 11.04.2012, 11:45   #3  
trud is offline
trud
Участник
Лучший по профессии 2017
 
1,039 / 1630 (57) ++++++++
Регистрация: 07.06.2003
Записей в блоге: 1
по юзеру и кукис не подходит.
нично не мешает открыть 2 браузера на одном компьютере и работать с одной и той же формой. в этом случае и юзер и кукисы будут одинаковы
Старый 11.04.2012, 12:26   #4  
BOAL is offline
BOAL
Участник
Аватар для BOAL
MCBMSS
Злыдни
1C
Лучший по профессии 2015
 
621 / 453 (17) +++++++
Регистрация: 28.04.2003
Адрес: Москва
Тут важно отметить, что два разных браузера
Если это закладки в одном - то механизм сессий у них отработат, как одна сесиия

А если браузеры разные - то и кукисы тоже у них разные (это к слову)
Ведение юзера же может быть в разрезе кода активации (своя сессия, уникальный код, присваивается при конекте, потом им "подписываются" все данные)

То есть, все это тоже можно на приведенным способах.

Механизм сессий вообще и есть "текстовый" файл, который сам веб-сервер и ведет
То есть его можно реализовать локально для себя

ЗЫ поправка - речь я вел про сессию на сервере, мог не так понять вопрос, если речь про sessionid() с сессией в АХ
Уточнил - на веб-сервере сессия у нас не слетала, все стабильно было.

А сессия в АХ (даже если слетает), где используется и какие проблемы от этого?

Последний раз редактировалось BOAL; 11.04.2012 в 12:47.
Старый 11.04.2012, 14:09   #5  
trud is offline
trud
Участник
Лучший по профессии 2017
 
1,039 / 1630 (57) ++++++++
Регистрация: 07.06.2003
Записей в блоге: 1
А как узнать код сессии на web сервере? причем узнать надо в коде X++
т.е. нужно как раз вот это

Цитата:
разрезе кода активации (своя сессия, уникальный код, присваивается при конекте, потом им "подписываются" все данные)
для windows клиента аксапты этим уникальным кодом и будет значение возвращаемое фукцией sessionid(), но если этот же код используется в web, то он перестает работать
Старый 11.04.2012, 14:32   #6  
oip is offline
oip
Axapta
Лучший по профессии 2014
 
2,564 / 1416 (53) ++++++++
Регистрация: 28.11.2005
Записей в блоге: 1
Не то?

X++:
str getAXsessionID() 
 { 
     IISRequest              request;
     IISRequestDictionary    varList; 
     str                     ret; 
     str                     cookieText; 
     int                     startPos; 
     int                     endPos; 
     {
         request = new IISRequest(); 
         varList = request.serverVariables(); 
         cookieText = request.serverVariables().itemTxt('HTTP_COOKIE'); 

        if (cookieText) 
         { 

            // Format __AXAPTA_SESSION_ID=XXXXXXXX; 
             startPos    =  strScan(cookieText,'__AXAPTA_SESSION_ID=',1,strlen(cookieText));

            if (startPos) 
             { 
                 // Session Identifier exists 
                 endPos      = strScan(cookieText,';',startPos,strlen(cookieText));
                 if (endpos) 
                 { 
                     // multiple identifiers in cookie, use between start & end 
                     ret = substr(cookieText, startPos+20, EndPos-StartPos-20); 
                 } 
                 else 
                 { 
                     // no others, just use remainder of string 
                     ret = substr(cookieText, startPos+20, strLen(cookieText)-20);
                 } 
            }
         } 
     } 
     return ret;
}
Старый 11.04.2012, 17:04   #7  
nikos2001 is offline
nikos2001
Участник
 
25 / 27 (1) +++
Регистрация: 23.02.2008
Цитата:
Сообщение от trud Посмотреть сообщение
Иногда требуется сохранять какие-то уникальные данные для сессии пользователя. В windows клиенте используют фукнцию sessionid(), которая возвращает код сеанса.
Попробуй использовать AxSession.GetItemFromCache("name") на UserControl. Сам не пробовал, так что не могу сказать как это работает.

http://geekswithblogs.net/Prabhats/a...x-session.aspx
Старый 11.04.2012, 18:50   #8  
trud is offline
trud
Участник
Лучший по профессии 2017
 
1,039 / 1630 (57) ++++++++
Регистрация: 07.06.2003
Записей в блоге: 1
[QUOTE=oip;271169]Не то?

Не, открываю у себя 2 браузера, на обоих выдается одно и тоже значение

nikos2001 - что -то совсем не понятно к чему это. функция нужна для x++

Но все равно спасибо
Старый 11.04.2012, 19:00   #9  
oip is offline
oip
Axapta
Лучший по профессии 2014
 
2,564 / 1416 (53) ++++++++
Регистрация: 28.11.2005
Записей в блоге: 1
Два разных окна (или две разные вкладки) одного и того же браузера? Тогда конечно одинаковые.
Старый 11.04.2012, 19:07   #10  
trud is offline
trud
Участник
Лучший по профессии 2017
 
1,039 / 1630 (57) ++++++++
Регистрация: 07.06.2003
Записей в блоге: 1
два раза тыкнул в браузер. т.е. именно окна.
хотя завязываться на то, что это не будут разные вкладки тоже не очень правильно. портал то работает нормально при этом
Старый 12.04.2012, 09:39   #11  
ice is offline
ice
Участник
Аватар для ice
Лучший по профессии 2014
 
1,732 / 406 (17) +++++++
Регистрация: 23.03.2006
а класс websession ничем не может помочь?
Теги
код сеанса

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
как узнать код ошибки при подключении к базе? CHESER85 DAX: Программирование 13 15.07.2013 10:25
axforum blogs: как узнать код ошибки при подключении к базе? Blog bot DAX Blogs 0 24.02.2012 10:11
Как программно узнать текущий объект и метод в котором выполняется код? McCoy DAX: Программирование 15 25.02.2011 23:34
Web портал и завершение сессии egorych DAX: Программирование 5 01.02.2008 18:27
Inside Dynamics AX 4.0: The Web Framework Blog bot DAX Blogs 0 25.10.2007 03:04

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 01:01.