Сессия ASP.NET - PullRequest
       16

Сессия ASP.NET

1 голос
/ 15 ноября 2011

Сессионный вопрос в asp.net/c#

У меня есть несколько страниц asp.net и объект класса. например Класс User объект содержит

    public string Name { set; get; }
    public string Address { set; get; }
    etc.....

pg1.aspx: при нажатии кнопки данные сохраняются в сеансе и перенаправляются на pg2.aspx

например. pg1.aspx

    User u = new User();
    u.Name = TextBox1.Text;
    Session.Add("USERINFO", u);
    Response.Redirect("pg2.aspx");

например. pg2.aspx // чтение данных ..

    User u = ((User)Session["USERINFO"]);
    Response.Write(u.Name + "<br/>");

.. и т. Д. (У меня есть 5 страниц, и данные передаются от страницы к странице в сеансе), как только пользователь достигает последней страницы, которую он хранит в базе данных, в противном случае я не хочу хранить неполные данные в базе данных .

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

Как можно избежать ввода пользователем данных в tab1 на страницу 3, и если пользователь открывает tab2 и продолжает это делать, данные вводятся в tab1 ....

Надеюсь, в этом есть смысл ... чего я пытаюсь достичь ... Спасибо.

Ответы [ 2 ]

2 голосов
/ 15 ноября 2011

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

К сожалению, принятый ответ не будет работать, поскольку он поддерживает «уникальный» идентификатор сеанса для каждой страницы, а не для вашей группы из 5 страниц.

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

  • Модификация файла web.config, как описано в связанной статье
  • Получение уникального префикса ключа сеанса для каждого значения сеанса
  • Использование некоторой логики для предотвращения открытия одним и тем же пользователем нескольких сессий на одном компьютере
0 голосов
/ 15 ноября 2011

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

Итак, помимо добавления к сеансу, вы можете получить:

var value = Session[key] as string;
if (value != null)
{
    //move on to the next appropriate page 
    //after determining which that is by other conditions
}
//we obviously need the page at which we get this data!

И оттуда вы можете строить свои условия

...