Как отбросить переменную сеанса при закрытии веб-страницы? - PullRequest
2 голосов
/ 13 апреля 2009

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

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

Ответы [ 3 ]

5 голосов
/ 13 апреля 2009

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

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

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

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

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

0 голосов
/ 13 апреля 2009

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

protected void Session_End(object sender, EventArgs e)
{

}

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

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

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

0 голосов
/ 13 апреля 2009

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

...