【问题标题】:Session ASP.NET会话 ASP.NET
【发布时间】:2011-11-14 23:21:06
【问题描述】:

asp.net/c#中的会话问题

我有多个 asp.net 页面和一个类对象。 例如 类用户对象包含

    public string Name { set; get; }
    public string Address { set; get; }
    etc.....

pg1.aspx:当按钮被点击时,数据存储在session中并重定向到pg2.aspx

例如pg1.aspx

    User u = new User();
    u.Name = TextBox1.Text;
    Session.Add("USERINFO", u);
    Response.Redirect("pg2.aspx");

例如pg2.aspx //读取数据..

    User u = ((User)Session["USERINFO"]);
    Response.Write(u.Name + "<br/>");

..etc..(我有 5 页,数据在会话中从一页到另一页传递)一旦用户到达它存储在数据库中的最后一页,否则我不想在数据库中存储不完整的数据.

这一切都很好,除非我使用多个选项卡来运行同一个网络应用程序,数据会相互覆盖......如果我使用单独的浏览器,它工作正常,但不能使用选项卡......

如何避免用户在 tab1 中输入数据进入第 3 页,如果用户打开 tab2 并继续不超过 tab1 中输入的数据...。

我希望这是有道理的......我正在努力完成......谢谢。

【问题讨论】:

  • 尝试让您的问题摘要比 Session ASP.net 更具描述性
  • 如果用户配置了在选项卡中打开新窗口的东西,那么您的意思是重定向,那么您的应用程序就无法工作?

标签: asp.net session session-variables


【解决方案1】:

这可能是一个重复的问题,所以我只是将您重定向到一些可以解决您的问题的答案。

不幸的是,接受的答案不起作用,因为它为每个页面维护一个“唯一”会话标识符,而不是您的 5 个页面组。

您的浏览器版本以及在其中启动新选项卡和窗口的不同方法决定了会话是否在多个选项卡和窗口之间共享。控制它可以通过

  • 链接文章中描述的对 web.config 的修改
  • 为每个会话值提供唯一的会话密钥前缀
  • 使用某些逻辑来防止同一用户在同一台​​计算机上打开多个会话

【讨论】:

  • 这个问题不是很清楚,但我会尝试推断。在使用会话之前,您应该了解它们是如何工作的。会话(默认情况下)依赖于“会话 Cookie”(默认情况下)在会话初始化时生成并在选项卡之间共享。 Microsoft 的这篇文章(来自上面引用的答案)提供了更多详细信息。 msdn.microsoft.com/en-us/library/ms178581.aspx
  • @kingdango:感谢您帮助澄清我想说的话!
  • 抱歉不够清楚,如果使用了多个选项卡,我需要跟踪多个会话。 Cory 我尝试使用您发布的链接,但我不确定在生成 pogeId 并将其保存到用户对象后我需要做什么......如果使用了另一个选项卡,我如何不覆盖数据?如果我添加 它可以工作,但它会在浏览器中显示会话 ID,我怎么不显示它?
【解决方案2】:

解决当前实现的最简单方法可能是检查您是否拥有您期望从该页面获得的信息,如果不满足条件,则需要输入数据,或适当重定向取决于您处于流程的哪个阶段(基于可用的数据)。

因此,除了添加到会话中,您还可以获得:

var value = Session[key] as string;
if (value != null)
{
    //move on to the next appropriate page 
    //after determining which that is by other conditions
}
//we obviously need the page at which we get this data!

你可以从那里建立你的条件

【讨论】:

  • 我不能这样做,因为用户可以返回上一页并修改数据。
猜你喜欢
  • 1970-01-01
  • 2010-09-13
  • 1970-01-01
  • 2010-10-20
  • 2011-05-15
  • 1970-01-01
  • 2010-11-29
  • 1970-01-01
相关资源
最近更新 更多