环境是使用C#的ASP.NET 4.0。
我打算在会话变量中添加我需要的ID。例如:
Session["ProjectID"] = ProjectsComboBox.SelectedValue.ToString();
但是,用户可能会在两个不同的浏览器窗口中的同一台计算机上打开我的Web应用程序,并且可以处理两个不同的项目。
每个浏览器,每台PC或每次登录的会话变量是什么?
为当前浏览器窗口存储此ID的最佳方法是什么?
谢谢!
答案 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