Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/286.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 每个浏览器选项卡的不同ASP.NET会话_C#_Asp.net_Session - Fatal编程技术网

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或其他内容取决于具体情况。