2009-03-13 3 views
4

Привет Я использую сеансы в своем приложении, и мне было интересно, какая оптимальная практика для поддержания значения сеанса на странице. Мне нужно значение, которое сохраняется в сеансе для сохранения, до тех пор, пока сообщение не будет отправлено на конкретную страницу. Позвольте мне проиллюстрировать:Лучшая практика сеансов

Page A:        Page B: 
Sets Session["ID"] = 5  --> Gets Session["ID"] 
And redirects to Page B    and populates data. 

Мне нужно Session["ID"] на странице B, чтобы остаться в живых до тех пор, пост обратно не выполняется на странице B. Мне нужно это, потому что я буду использовать значение Session["ID"] обновления данных в базе данных.

Мой вопрос: является ли гарантия того, что Session["ID"] сохранит свою ценность до тех пор, пока не будет выполнена обратная связь? Разве он не умрет? Если да: какие методы я могу предпринять, чтобы убедиться, что он сохраняет свою ценность?

Я думал о создании частной переменной в Page B, чтобы сохранить Session["ID"] на странице_Load. Пожалуйста, дайте мне знать, что вы думаете, спасибо.

Прошу прощения, я должен был сказать: я не могу разрешить пользователю изменять ID. Так что нет Query Strings, спасибо.

ответ

0

Вместо использования сеанса вы можете перенести переменную со страницы на страницу либо через строку запроса, либо в поле скрытого сообщения, так как это будет жить с клиентом, а не таймаут, как если бы это было в сеансе.

EDIT: Если вы не хотите, чтобы пользователь вмешивался со значением, которое вы могли бы зашифровать/обфускать скрытое поле сообщения.

+0

Я не могу позволить пользователю вмешаться со значениями – DavidS

0

переменные сессии остаться в живых до сеанса времени ожидания (период ожидания не уточняются в файле web.config)

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

В asp.net вы можете использовать viewstate для сохранения данных через postbacks на той же странице.

Для вашего вопроса я бы рекомендовал использовать параметры строки URL запроса передать идентификатор между страницами

т.е. myurl.aspx ID = 5

затем в коде ASPX сделать:

int ID = (int)page.request.params["ID"]; 

Edit:

Если вы обеспокоены пользователи изменения параметра ID можно поставить бизнес-Logi c в pageload страницы B, чтобы гарантировать, что пользователь имеет соответствующие права на изменение этого значения ID.

0

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

Настоящая вещь, о которой мне интересно, почему бы вам просто не передать ее как параметр GET при перенаправлении с страницы А на страницу B? У вас может быть вполне обоснованная причина, но обычно, если я хочу передавать данные с одной страницы на другую, я бы это сделал.

2

Сессия хранится в памяти на сервере по умолчанию. Это может быть проблематично, если сеанс пользователя не работает.Кроме того, если вы используете более одного сервера в качестве фермы, вы не можете использовать сессию в памяти, так как вы не можете гарантировать, что пользователь будет использовать один и тот же сервер каждый раз.

Лучший способ гарантировать, что информация о сеансе не будет потеряна, - это сохранить сеанс пользователя в базе данных SqlServer. Here is a tutorial on how to set that up.

Сессия действительно не такая, как убийца, как предполагают некоторые плакаты. Это очень полезный способ легко поддерживать состояние для каждого пользователя.

Также, пожалуйста, см. Мой ответ на this question для хорошего способа обертывания объекта сеанса ASP.NET.

+0

. Faqfront.com больше не доступен. – Farhan

1

Поскольку вы используете asp.net, и вы хотите передать данные от одной страницы к Иным, вы можете также использовать CrossPage постбэк

crosspage постбэк из MSDN:

В некоторых случаях, вы можете хотите отправить одну страницу на другую страницу. Например, вы можете создать многостраничную форму , которая собирает различную информацию на каждой странице. В этом случае вы можете настроить определенные элементы управления (те, которые реализуют интерфейс IButtonControl , например, элемент управления Button ) на странице для отправки на другой целевой страницы. Это , называемый межстраничной проводкой. Перекрестная проводка предоставляет некоторые преимущества перед использованием метода Transfer для перенаправления на другую страницу. Подробнее см. В разделе Перенаправление пользователей на страницу .

if (Page.PreviousPage != null) 
{ 
    TextBox SourceTextBox = 
     (TextBox)Page.PreviousPage.FindControl("TextBox1"); 
    if (SourceTextBox != null) 
    { 
     Label1.Text = SourceTextBox.Text; 
    } 
} 

Источник: http://msdn.microsoft.com/en-us/library/ms178139.aspx

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

-1

Если у нас есть страница, которая не требует времени сеанса выхода, а затем в соответствии с источником

: https://msdn.microsoft.com/en-us/magazine/cc163730.aspx,

мы можем использовать <% @ Page EnableSessionState = "False" %>

также ссылка обсуждает различные лучшие практики.

Смежные вопросы