是否可以不在不同的浏览器标签之间共享会话变量?
我想在标签页之间保留一个登录会话,但不想在打开的标签页之间共享信息。
有可能吗?
答案 0 :(得分:2)
没有。对于由您的浏览器控制的会话cookie,这是不可能的。如果cookie在其他标签中重复使用,你无法控制(通常他们会这样做,但浏览器供应商可能会偏离它)。
您可能正在寻找“视图状态”,隐藏的输入字段或类似的方法让状态随页面一起移动而不是会话。
答案 1 :(得分:1)
您可以实现自己的PageSession
,它基本上会为您的会话变量添加前缀。一开始可能听起来很大,但这不是什么大问题。
创建一个基页
首先,让我们创建一个BasePage
类。此类将是继承自Page
。
我们将在那里创建一个名为PageInstanceUID
public string PageInstanceUID
{
get
{
ViewState["PageInstanceUID"];
}
set
{
ViewState["PageInstanceUID"] = value;
}
}
然后我们在加载时为该属性分配一个唯一值:
if(!IsPostBack)
{
PageInstanceUID = new FileInfo(Request.PhysicalPath).Name + Guid.NewGuid().ToString();
}
创建PageSession类
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类中创建PageSession
现在您需要在BasePage中创建一个PageSession类。
public PageSession PageSession
{
get
{
return _pageSesion;
}
}
连接点
最后,修改您的网页以继承BasePage
而不是Page
。