2009-04-13 3 views
1

Мы выполняем процедуру в нашей работе при разработке веб-страницы, это привязка страницы к одной или нескольким переменным сеанса, эти переменные сеанса используются только для этой страницы, для хранения текущих объектов обработки, поэтому при закрытии страницы нет необходимости их.Как отказаться от переменной сеанса при закрытии веб-страницы?

Как я могу отбросить эти переменные сеанса во время закрытия страницы? Любые предложения относительно этой техники или как решить эту проблему?

ответ

4

Там нет события на стороне сервера, который возникает, когда страница оставляется/закрыто. Также событие Session_End (упомянутое в других ответах) не вызывается, когда страница оставлена, так как пользователь может перейти на другие страницы одного и того же веб-приложения (и, следовательно, сеанс будет продолжать существовать).

я могу думать о 3-х возможных путях решения (или работать вокруг) этот вопрос:

- использовать ViewState для хранения данных с страницей-рамкой. Это то, для чего создается ViewState, и если у вас много данных, это не должно быть проблемой. Если у вас много данных, помните, что он будет сериализован/десериализован и отправлен клиенту/обратно на сервер для каждого запроса (что может привести к большим запросам и, следовательно, к плохой производительности).

- вместо того, чтобы данные в сессию, поместить его в Cache (с тайм-аутом низкой скользящего истечения). На своей странице вы можете получить доступ к своим данным так же, как и от сеанса, то есть data = Cache ["data"], но вы должны быть готовы к тому, что данные были удалены из кэша (вам нужно перезагрузить его снова из БД, например), если время между двумя запросами было больше времени истечения.

- использовать стороны клиента (JavaScript) OnUnload события, и вызвать некоторое действие (например, Ajax обратного вызова), чтобы удалить данные из сеанса. Но я думаю, что событие onUnload не является надежным (оно не будет запущено ни в одном случае, например, когда браузер завершается сбоем или диспетчером задач или если отключен javascript).

+0

Для ViewState: иногда есть много данных, так как иногда обрабатывающий объект хранит свои данные и данные своих данных. для Cache, я не знаю о его производительности против viewstate или session. Для случая разгрузки, каковы ваши сомнения. – Ahmed

+0

onUnload является непоследовательным, не уверен, что его уволят, если браузер произошел сбой, или если что-то похожее на выключение браузера. что это решение, которое мы использовали в недавнем проекте, я участвовал в –

+0

выше, я имел в виду «принудительное завершение работы», где вы читаете «выключение браузера» –

0

Если вы используете переменные только для этой страницы, сохраните их в viewstate. ViewState подходит для переменных с охватом страницы.

-1

Если вы используете сеансы ASP.NET (что вы, вероятно, есть), вы можете добавить файл global.asax к вашему растворению. В там это событие делегат можно найти (если нет, то создайте его):

protected void Session_End(object sender, EventArgs e) 
{ 

} 

.. Здесь вы можете очистить вашу коллекцию сессии.

protected void Session_End(object sender, EventArgs e) 
    { 
     Session.Clear(); 
    } 

Это будет срабатывать, когда сессия истекает или когда пользователь нажимает выйти :)

+0

Это будет запущено, когда сессия закончится или когда пользователь нажмет кнопку выхода из системы, мне нужны эти сеансы, которые нужно удалить при закрытии/закрытии страницы? – Ahmed

+0

Мой плохой для недоразумений тогда :) Вы должны посмотреть на ответ Мартина - однако вы не можете полагаться на клиента, чтобы сообщить серверу, когда он закрывает страницу (или переходит к другому). Это основа проблемы :( – cwap