每个浏览器的Gobal ASP.NET变量

时间:2011-06-02 18:52:35

标签: c# session-variables asp.net-4.0

环境是使用C#的ASP.NET 4.0。

我打算在会话变量中添加我需要的ID。例如:

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

但是,用户可能会在两个不同的浏览器窗口中的同一台计算机上打开我的Web应用程序,并且可以处理两个不同的项目。

每个浏览器,每台PC或每次登录的会话变量是什么?

为当前浏览器窗口存储此ID的最佳方法是什么?

谢谢!

2 个答案:

答案 0 :(得分:0)

我假设你正在使用默认的,基于cookie的会话状态管理方法。根据用户打开多个窗口的方式,每个窗口很可能被视为同一会话的一部分,因为cookie将在窗口之间共享。

这是一篇优秀的文章,为同一个问题提供了解决方案:

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

祝你好运!

答案 1 :(得分:0)

  

每个浏览器,每台PC或每次登录的会话变量是什么?

默认基于cookie的是每个浏览器,因此通过打开选项卡或浏览器的另一个实例,Session变量将是相同的。

如果他们打开另一个浏览器而不是第一个浏览器(第一个项目他们打开Firefox和IE用于第二个),那么两个会话变量会有所不同。

  

为当前浏览器窗口存储此ID的最佳方法是什么?

如果目标是让您的用户在同一浏览器中同时处理多个项目(使用制表符或其他实例),我建议不要使用Session变量。

我假设您必须保留多个页面的ProjectID,我建议将其作为路径放入您的网址并将数据恢复到您的网页上。

您的网址可能如下/ Project / Edit / 12345。

以下是Global.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