【问题标题】:Asp.net,Session state issues with the following scenarioAsp.net,会话状态问题与以下场景
【发布时间】:2013-08-02 01:35:24
【问题描述】:

谁能帮我解决我在课程中面临的问题。

int a=5;

 HttpContext.Current.Session["Session_Variable"] = a;

 a = 0;

这正是我面临的问题。 首先,我们将值“a”分配给包含值为 5 的会话。 之后,我将'a'设为0。 在这种情况下,存储在会话中的值也会影响为 0。

我尝试了IprocOutProc(SqlServer session) 的哪个会话,仍然存在问题。

提前致谢 阿迪亚普

【问题讨论】:

  • 这是您使用的确切代码吗?因为那根本不会发生。变量a 的值在存储在会话变量中时会被复制,因为它是值类型,因此更改变量a 不会影响会话变量。
  • 嗨@Guffa,感谢您的快速回复。这是我正在使用的确切场景,但不是代码。如果我使用appfabric缓存而不是会话,这工作正常。我准备提供如果需要,请提供更多详细信息。谢谢
  • 提供更多详细信息:这是在页面加载时设置的还是在哪里设置的?显示此行所在的完整函数
  • 嗨@FlopScientist,这个方法在HTTPHANDLER(.cs)中。这是从jQuery ajax调用的。
  • 嗨 Aditya,请在上面 3 行存在的地方展示完整的功能

标签: asp.net mvp


【解决方案1】:

您在 cmets 中显示的代码与问题中的代码完全不同。

问题中的代码使用值类型,因此将值从变量分配给会话变量将复制该值。为变量分配另一个值不会影响复制到会话变量的值。

cmets 中的代码使用引用类型,因此将变量中的值分配给会话变量将复制引用。这意味着变量和会话变量都指向对象的同一个实例。此外,注释中的代码更改了对象的一个​​成员,它没有为变量分配新值。

当您更改变量指向的对象的成员时,它会更改会话变量指向的对象,因为它是同一个对象。它不是看起来相同的对象的另一个副本,它实际上是同一个对象。

如果要将对象放入会话变量中,然后能够在不影响会话变量指向的对象的情况下更改对象,则需要克隆对象并将副本放入会话变量中。如果对象支持克隆,您可以使用Clone 方法,否则您需要创建另一个与原始对象具有相同值的对象实例。

【讨论】:

  • 嗨@Guffa,谢谢你的回复。正如你所说,我只面临引用类型的问题。我尝试创建新实例。但它没有用。我会尝试克隆方法。如果您提供有关克隆的更多详细信息,我将非常感谢
猜你喜欢
  • 2011-02-07
  • 1970-01-01
  • 2019-10-28
  • 2015-07-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-06-07
相关资源
最近更新 更多