【问题标题】:working with static variables in .net在 .net 中使用静态变量
【发布时间】:2011-03-05 11:22:47
【问题描述】:

静态变量在 .net 和 asp.net 的整体编程中的确切用途是什么...

最近我去面试,面试官问了我2个我不确定的问题..

  1. 会话对象有什么用,我说会话是服务器端对象,当你想在服务器端存储用户特定数据时使用它们,然后他问我是否想使用静态变量同样,我是妈妈,谁能告诉我如果我将用户特定信息存储在静态变量中,asp.net 的行为会如何。

  2. 如果我使用 cookie,这是在客户端存储数据的最佳选择(不敏感的),但是如果用户在他的机器上禁用了 cookie,我的应用程序会崩溃,我必须如何处理这种异常...

【问题讨论】:

    标签: .net asp.net variables static


    【解决方案1】:

    1.) 会话是用户特定的字典(每个用户都有自己的),静态/共享变量是应用程序范围内的(只要应用程序运行/所有会话不被放弃)。

    如果您想存储属于一个用户的数据,通常您会使用 Session,如果您想将数据共享给所有用户,您会使用静态变量。

    因此,Session 的可扩展性不如静态变量,因为它会随着用户数量的增加而增加。静态变量(或ASP.Net Cache)的一个缺点是,当不同的用户自己并行访问/更改它们时,您必须避免冲突。性能是静态变量/缓存的优势之一。

    所以你对 Session 的回答是正确的。如果您想对用户特定数据使用静态变量,您可以使用静态字典,其中用户(例如 MembershipUser 对象或其 providerkey 作为键)和要存储为值的数据。但通常您会按照正确的方式使用 Session。

    2.) 确定浏览器是否接受 Cookies

    客户端可以禁用 cookie。检查cookie是否被禁用的一种方法是将cookie写入响应并在下一个请求中检查cookie是否存在。如果 cookie 不存在,您需要假定 cookie 被禁用。

    Here 是关于 cookie 的更多信息。

    【讨论】:

    • 感谢您的回复,我很清楚我的第一个问题,但对于第二个问题,我想知道是否有任何方法可以在客户端浏览器上以编程方式再次启用 cookie,如果它们被禁用。
    • @Abbas - 不,没有办法以编程方式启用 cookie。这是出于安全原因。
    【解决方案2】:
    1. 静态变量范围与应用程序域相关联,因此静态变量值对所有用户都是相同的。您不能使用静态变量来保存用户特定的数据。静态变量可以很好地存储应用程序特定的信息,但由于 ASP.NET 是一个多线程环境,您需要管理锁定/解锁。

    2. 描述了如何验证 cookie 被禁用here

    【讨论】:

      【解决方案3】:
      1. 我会将会话用于仅由该用户/会话所需的数据,并将静态变量用于应用程序级变量。

      What is better: Static variable V.S. Asp.NET Application Session ? 似乎同意我的想法。

      1. if cookies are disabled, does asp.net store the cookie as a session cookie instead or not? 作为一个类似的问题讨论了明确要求 cookie 或使用 ViewState 作为替代方案。您应该通过查看 cookie 中的内容来检查 cookie 是否存在

        Request.Cookies

      如果为空,请执行您决定的任何替代方案。

      【讨论】:

        【解决方案4】:

        静态变量用于应用程序的实例。大多数情况下,表单应用程序在客户端 PC 上运行。而静态变量则一直用在这些之中。

        Web 应用程序只有一个实例在服务器上运行。因此,连接到该服务器的每个客户端都将共享相同的数据。

        您使用 Session 变量来创建仅与客户端相关的变量和对象。

        【讨论】:

          猜你喜欢
          • 2017-05-13
          • 2011-01-29
          • 2011-12-05
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多