Re[2]: Сессии... Профи подскажите!
От: Аноним  
Дата: 12.09.05 13:35
Оценка: 3 (1)
попробуй так
  protected void Session_Start(Object sender, EventArgs e)
  {
   Session["test"]="test from start";
   SessionListAdd(Session);
  }




данное сообщение получено с www.gotdotnet.ru
ссылка на оригинальное сообщение
Сессии... Профи подскажите!
От: Bakset  
Дата: 12.09.05 07:07
Оценка:
Здравствуйте всем!
начну с начала... возникла необходимость отслеживать все сессии в приложении не спрашивайте почему, надо соответственно стандартного енумератора не предусмотренно для таких делов вроде да еще и инфу надо дополнительную хранить о сессии когда стартанула и т.д. был выбран способ создания структуры описания сессии и хранения ее в ArrayList а его в свою очередь в application...

public struct UserSession
{
public string host,login,password,session_id;
public TimeSpan start_time,last_time;
public HttpSessionState session_link;
}

при старте создаем описанную структуру ставим session_link=Session тоесть сохраняем ссылку на сессию и добавляем в ArrayList
public static bool SessionListAdd(HttpSessionState session)
{
if (!SessionListExist(session.SessionID))
{
UserSession UsSess = new UserSession();
UsSess.session_id=session.SessionID;
UsSess.start_time=DateTime.Now.TimeOfDay;
HttpSessionState session_link=session;
UsSess.session_link=session;
ArrList.Add(UsSess);
return true;
}
return false;
}

когда из сессии пытаюсь получить ссылку на другую сессию то вроде как все ок ошибок нет в watch даже показывается что все передалось... но не изменять не читать из нее не могу... как быдто в пустоту все уходит...
вот код получения сессии по SessionID
public static HttpSessionState SessionListGet(string session)
{
if (SessionListExist(session)) //просто ф-я проверки есть ли сессия в списке
{
for (int i=0;i<ArrList.Count;i++)
{
if (((UserSession)ArrList[i]).session_id==session)
{
HttpSessionState ses=((UserSession)ArrList[i]).session_link;
return ses;
}
}
}
return null;

}

так вот по идее все должно работать... ан нет нифига... не Abandon() не запись значений не работает...
Люди подскажите куда копать!
Re: Сессии... Профи подскажите!
От: Аноним  
Дата: 12.09.05 08:19
Оценка:
Здравствуйте, Bakset, Вы писали:

B>когда из сессии пытаюсь получить ссылку на другую сессию то вроде как все ок ошибок нет в watch даже показывается что все передалось... но не изменять не читать из нее не могу... как быдто в пустоту все уходит...


попробуй объявить свой объект не struct, а class.
и почитай про разницу между value- и reference-типами http://rsdn.ru/article/dotnet/values.xml
Автор(ы): Андрей Мартынов
Дата: 08.04.2003
Начиная программировать в среде .Net, довольно часто сталкиваешься с трудностями, в основе которых лежит недостаточно чёткое понимание различий в свойствах ссылочных типов (reference based types) и типов-значений (value based types). Между тем, мотивация применять типы-значения велика, т.к. умелое применение типов-значений может существенно повысить эффективность программного кода. Однако необходимо постоянно помнить, что типы-значения имеют ряд особенностей, которые необходимо учитывать как при разработке (определении) этих типов, так и при их использовании. Эти особенности value-типов и их отличия от ссылочных типов рассмотрены ниже.
Re[2]: Сессии... Профи подскажите!
От: Аноним  
Дата: 12.09.05 08:29
Оценка:
да пробовал... тоже самое... один в один...
Re[3]: Сессии... Профи подскажите!
От: Bakset  
Дата: 13.09.05 05:22
Оценка:
Да!!!!! офигеть!!!!! Спасибо!!!! если в сессию ничего при создании не заносить то она толи очищается то ли фиг знает что... а если добавить любой обьект... вот как ты написал строку напримет то все работает... интересно почему так? что за механизм? сборка мусора не может отрабатывать сессия то еще жива... и вот еще что...

if (Session==s.session_link)// пробовал и Session.Equals(s.session_link) то же самое...
{
Response.Write("OK!");
}
При первом отображении страницы отображается ОК! при всех последующих нет... почему? ссылка то должа оставатся тойже...
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.