C# 每个浏览器选项卡的不同ASP.NET会话
是否可以不在不同的浏览器选项卡之间共享会话变量 我想在选项卡之间保留一个登录会话,但不想在打开的选项卡之间共享信息C# 每个浏览器选项卡的不同ASP.NET会话,c#,asp.net,session,C#,Asp.net,Session,是否可以不在不同的浏览器选项卡之间共享会话变量 我想在选项卡之间保留一个登录会话,但不想在打开的选项卡之间共享信息 有可能吗?没有。会话cookie由您的浏览器控制,这是不可能的。如果cookie在其他选项卡中重复使用,您将无法进行任何控制(通常会,但浏览器供应商可能会偏离这一点) 您可能正在寻找“查看状态”、隐藏输入字段或类似方法,以使状态随页面而不是会话一起移动。您可以实现自己的PageSession,它基本上为会话变量添加前缀。一开始实施起来可能听起来相当大,但这没什么大不了的 创建一个基
有可能吗?没有。会话cookie由您的浏览器控制,这是不可能的。如果cookie在其他选项卡中重复使用,您将无法进行任何控制(通常会,但浏览器供应商可能会偏离这一点)
您可能正在寻找“查看状态”、隐藏输入字段或类似方法,以使状态随页面而不是会话一起移动。您可以实现自己的
PageSession
,它基本上为会话变量添加前缀。一开始实施起来可能听起来相当大,但这没什么大不了的
创建一个基本页面
首先,让我们创建一个BasePage
类。该类将是从页面
继承的普通类
我们将在那里创建一个名为PageInstanceUID
public string PageInstanceUID
{
get
{
ViewState["PageInstanceUID"];
}
set
{
ViewState["PageInstanceUID"] = value;
}
}
然后,我们在加载时为该属性指定一个唯一值:
if(!IsPostBack)
{
PageInstanceUID = new FileInfo(Request.PhysicalPath).Name + Guid.NewGuid().ToString();
}
创建页面会话类
PageSession
类也非常简单:
public class PageSession
{
readonly BasePage _parent;
public PageSession(BasePage parent)
{
_parent = parent;
}
public object this[string name]
{
get
{
return _parent.Session[GetFullKey(name)];
}
set
{
_parent.Session[GetFullKey(name)] = value;
}
}
public string GetFullKey(string name)
{
return _parent.PageInstanceUID + name;
}
}
在BasePage类中创建页面会话
现在需要在BasePage中创建PageSession类
public PageSession PageSession
{
get
{
return _pageSesion;
}
}
连接点
最后,编辑页面以从
BasePage
继承,而不是Page
这是由每个用户控制的浏览器设置,应用程序对此无能为力。如果选项卡共享会话,则它们共享会话数据。如果您需要打开的选项卡表现出不同的行为(可能是因为它们可能显示不同的记录,我想是吧?),那么考虑一种比使用会话更好的方法来实现您的功能。可能隐藏的表单字段、viewstate或其他内容取决于具体情况。