【问题标题】:How to save clicking counter in c#如何在c#中保存点击计数器
【发布时间】:2014-01-08 21:17:50
【问题描述】:

我建立网站并想计算某个按钮的点击次数。我创建并尝试了此类计数器:

public static class Counter
{
    public static int counter = 0;
}

每次我点击按钮时,计数器都会增加(计数器++),我会在我的网站上看到它,但是,如果我关闭 chrome 并再次进入我的网站,计数器会从零开始。

如何保存计数器? “静态”不需要这样做吗?

【问题讨论】:

  • 你需要一个数据库。
  • 这是唯一的办法?
  • 根据您希望该字段的安全程度,您可以使用数据库(由服务器控制)或 cookie(由用户控制)。
  • 您想要的只是“您网站的访问者数量”。您需要将该数据永久存储到您的数据库中。
  • @Koen:这将提供竞争条件。

标签: c# asp.net counter


【解决方案1】:

我敢打赌,这是因为应用程序空间被刷新 - 它不应该因为您关闭浏览器窗口而重置,从而放弃当前会话(如果会话 cookie 不是持久的,那就是。)

Visual Studio 可能会重新发布您的文件(如果使用远程 IIS)或只是简单地重新启动本地 IIS Express 实例,具体取决于您设置开发环境的方式;我确实相信将特定内容设置为 Static 会使其对所有当前会话可用。

也就是说,您可能希望将其保留在当前会话下(使用 Session 对象)。

或者,如果您想在服务器重新启动之间保留信息,您可以尝试读取和写入本地存储,例如纯文本或 XML 文件。您可以在以下链接中找到一篇非常好的文章:

http://www.codeproject.com/Articles/544839/Implement-ASP-NET-custom-XML-file-configuration

例如,更复杂的版本将使用本地(或远程)数据库。

希望它对你有用。

【讨论】:

  • +1 提供了相当简单的解决方案,但我认为重要的是要注意对文本文件的非托管访问不是一个值得生产的解决方案(如果我是,这将是面试的结束在表的招聘方面),并且不适合任何拥有超过 1 个用户的应用程序。
  • 这是一个完全公平的评论,@DavidLively,你应该记住这一点 Or K。
【解决方案2】:

static 字段在每个进程中都是唯一的。根据您的应用程序池配置,您可以拥有 2、20 或 100 个副本。

它们也不是线程安全的。适合使用静态成员的实例(双关语)非常非常少。

就在我的脑海中,一个特定的静态“实例”会在以下情况下消失:

  1. 应用程序池被回收。在 IIS 上,这默认为 20 分钟不活动。

  2. 应用程序进程退出(您的应用程序池中可能有多个进程正在运行)。这作为 (1) 的一部分发生,但也会发生,例如,您正在使用 Visual Studio 调试 Web 服务器 (Cassini),将您的项目配置为启动该站点进行调试,并且关闭最初启动的浏览器。 (发生这种情况是因为 VS 认为关闭它启动的浏览器相当于说“我玩完了。现在回到编码”或点击停止按钮。)

  3. 另一个线程覆盖了您存储的值(谷歌“竞争条件”。)

您真的,真的应该将它存储在数据库中。如果您正在构建一个网站,那么无论如何您都需要一个数据库。 任何与应用程序状态相关的都应该存储在数据库中。

另外,这真的,真的不应该发生在服务器端。每次有人单击页面上的任何位置时,您是否真的执行回发?如果是这样,你有 JavaScript 来处理 那个,所以跳过这个疯狂,说脚本触发 AJAX 请求,并让目标处理程序将它 记录在数据库中.

【讨论】:

  • +1 表示正确的范围提及,我得到了错误的调试 Web 服务器名称。需要咖啡...
【解决方案3】:

看起来你在使用一个网站,所以假定为 ASP.net。有多种方法可以存储信息。数据库可以是一个,也可以是持久性 cookie。有关如何创建 cookie,请参阅这篇文章:How do I set/unset cookie with jQuery?

【讨论】:

    【解决方案4】:

    您可以尝试将其保存在会话中,然后它将一直保留到会话超时(20 分钟),如果您希望它长时间将其写入已知位置的文件,并且当您关闭网络时将值写入文件,当网络再次启动时,从文件中取出 vakue。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多