Gobal ASP.NET переменная для каждого браузера

#c# #session-variables #asp.net-4.0

#c# #переменные сеанса #asp.net-4.0

Вопрос:

Среда является ASP.NET 4.0 с использованием C #.

Я собирался поместить нужный мне идентификатор в переменную сеанса. Например:

 Session["ProjectID"] = ProjectsComboBox.SelectedValue.ToString();
  

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

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

Каков наилучший способ сохранить этот идентификатор для текущего окна браузера?

Спасибо!

Комментарии:

1. Передайте идентификатор проекта с помощью Querystring и сделайте его частью любых сеансовых ключей, чтобы каждый открытый проект мог отслеживать свои собственные данные проекта. сеанс ie[«somekey» projId]=projSpecificValue;

Ответ №1:

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

Вот отличная статья, в которой предлагается решение идентичной проблемы:

http://graciesdad.wordpress.com/2007/05/26/multiple-browser-windows-with-one-session-state/

Удачи!

Ответ №2:

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

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

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

Каков наилучший способ сохранить этот идентификатор для текущего окна браузера?

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

Я предполагаю, что вам нужно сохранить ProjectID для нескольких страниц, я бы предложил поместить его в ваш URL в качестве маршрута и вернуть данные на ваши страницы.

Ваш URL-адрес может выглядеть следующим образом /Project /Edit/12345 .

Вот пример для вашего глобального файла.asax.cs

 protected void Application_Start(object sender, EventArgs e)
{
    RegisterRoutes(RouteTable.Routes);
}

public static void RegisterRoutes(RouteCollection routes)
{
    routes.MapPageRoute("",
        "Project/{action}/{projectId}",
        "~/Project.aspx");
}
  

В вашем Project.aspx.cs вы можете получить доступ к данным маршрута следующим образом:

 int year = Convert.ToInt32(Page.RouteData.Values["projectID"])
  

Вы можете обратиться к этому для получения дополнительной информации о маршрутизации:

http://msdn.microsoft.com/en-us/library/cc668201.aspx#routes

Комментарии:

1. Я использую веб-формы, а не MVC. Хотя спасибо.

2. Вы можете использовать маршрутизацию с asp.net веб-формы, просто укажите System.Web.Routing в своих ссылках, и в вашем глобальном запуске приложения.asax.cs вы сможете создавать свои маршруты.