在没有外部数据库的情况下跟踪用户的操作
Posted
技术标签:
【中文标题】在没有外部数据库的情况下跟踪用户的操作【英文标题】:Keep track of users' actions without external database 【发布时间】:2021-03-14 13:41:51 【问题描述】:长话短说:我们正在寻找一种方法来记录用户在我们的 .NET 网站上的进度,最好使用存储在应用层的资产。我们需要能够下载存储的数据(可以是csv、txt、db等)。
我们正在为一个大学项目制作一个小型教育游戏。参与者将访问为该项目制作的网站,被要求填写一份表格,玩游戏,然后填写另一份表格。因为为这个项目设置一个全新的服务器可能有点矫枉过正,我正在寻找更简单、无服务器的替代方案,特别是因为该网站仅用于该项目,而不是长期使用。
我有 2 个可能的解决方案:
-
在实验结束时,发送一封包含参与者结果的电子邮件。
使用嵌入式数据库。
第一个选项是“简单”的选项,但它可能会受到外部因素的影响,例如失去互联网连接,因为用户的进度必须在发送电子邮件之前临时存储在应用程序中(很可能在 SessionStorage或 Cookie)。 第二种选择的问题在于,我们担心我们误解了嵌入式 dbs 的用例,我们想澄清这一点。来自嵌入式数据库的教程,例如SQLite,看来嵌入式数据库是在用户的电脑上创建的,而不是在应用程序级别,我们以后可以自己读取。
嵌入式数据库是否适用于我们的场景?是否有任何其他方法可以在应用程序中拥有一些“静态”文件,可以在多个会话之间进行修改和持久化? 我们大多熟悉 ASP.NET Web 窗体,但我们不介意使用 NET Core,因为我们仍处于项目的早期阶段。
如果有第三方服务器提供商,这将使服务器设置变得更加容易,我们也对此感兴趣,但它必须是免费的,因为这是一个大学项目。
【问题讨论】:
处理 CSV 文件来存储数据是通往痛苦和折磨的途径。相信我。您正在构建一个 .NET 网站,出于您的目的,LocalDB 将满足您的一切需求。它相对简单,内置,可以做你需要的一切,甚至更多。 【参考方案1】:您的用户计算机上没有任何文件,并且用户计算机上没有基于 Web 的应用程序。事实上,作为一名网络开发人员,我无法在您的计算机上选择任何内容来上传。如果我能做到这一点,那么当你访问我的网站查看一些可爱的猫图片时,我的代码会在你的硬盘上翻找银行信息、称为“密码”的 Excel 表格,甚至窃取你所有的 Outlook 联系人。
所以不,您计算机上的 sqLite 数据库或任何文件都是 100% 的限制。
我正在寻找更简单、无服务器的替代方案,
您必须使用 asp.net 系统运行 Web 服务器。 Web 服务器是接收用户回传的东西。网页传送到网络服务器。 Web 服务器然后开始处理该页面。只有在此“往返”期间,您的 asp.net 代码(由 Web 服务器运行)才能运行。这样就处理了网页,然后运行您的代码(c#或vb.net)。最终网页渲染发生,然后网页被发送回用户浏览器。您编写的网络代码(背后的代码)永远不会与用户交互。它只与网页在服务器上的短暂时间交互,然后整个页面现在被发送回客户端浏览器。此时,用户可以再次与网页交互。你不能写这样一个无服务器的应用程序并期望使用 asp.net
当然,包含 SQL Server 的网络托管计划每月只需不到 10 美元 - 所以我不知道在哪里或为什么这是一个问题或问题。
但是这样的网站需要一个服务器,并且它们需要运行一种特定类型的 Web 服务器(IIS,或所谓的 Internet 信息服务)。或者我想你可以决定运行 Apache Web 服务器,但我不知道你在 Apache/Linux 上启动和运行 asp.net 站点的效果如何(显然这现在“有点”可能 - 但它是痛苦的我知道)。
那么是 SQL 服务器(比如免费快递版),还是 mysql,甚至是像 sqLite 这样的嵌入式数据库?它们在服务器上保持 100%,并且您在客户端读取/打开/触摸/弄乱文件的方式为零。正如我所说,您甚至无法选择要在代码中上传的文件。只有当出现“上传文件”选择按钮时,用户才能选择要打开的文件 - 即使在此之后,您作为开发人员也无法触摸甚至更改该文件名。您会得到一个“东西”,可以让您上传用户选择的内容(但您永远不能编写接触或抓取客户端计算机上的文件的代码 - 如果这是可能的,那么这个呈现的安全噩梦将摧毁互联网第一天)。
当您使用 Visual Studio (VS) 创建 + 构建一个 asp.net 网站时?好吧,它还安装了一个完整的网络服务器。 VS 曾经使用内置的 Web 服务器作为 VS 的一部分。但是,由于 Web 技术正在快速发展,并且 Microsoft 正在更新 IIS(他们的 Web 服务器不断更新),因此保持 VS 中内置的“小”Web 服务器与他们的“大”100% 兼容变得非常不可能商业级网络服务器。
所以,他们所做的就是为他们的网络服务器获取活跃的(并且是最新的)源代码,并且他们构建了一个“稍微”更轻量级的网络服务器版本。这种“更轻”的 Web 服务器称为 IIS express - 这就是 VS 能够启动网页的方式。所以不要误会,当您在 VS 中按 F5 来测试/尝试/启动网页并运行它时?您正在使用在您的计算机上运行的 FULL BLOWN Web 服务器来完成这项工作。
有一些框架可以让您在浏览器中创建和运行整个桌面应用程序,但在这种情况下存在安全问题,并且每台客户端计算机都需要在每台计算机上安装软件才能使其工作(事实上,您正在安装桌面软件,就像安装任何好的旧桌面程序一样)。但是,再次使用此类系统意味着您要在每台计算机上安装软件以使其正常工作 - 这很大程度上意味着您放弃了使用基于 Web 的软件的整个想法和优势(不必安装桌面程序)。
对于asp.net的任何用途?您需要一个网络服务器,并且 VS 在您的计算机上安装并设置了一个完整的网络服务器才能正常工作。
现在,您可以使用 IIS express(VS 安装的那个)将页面发送给您网络上的每个人。您将不得不打开计算机上的端口,并弄乱网络配置文件。但是,这很难,因为 IIS express 和完整版之间的“主要”区别?
主要区别在于成熟的 IIS Web 服务器有大量的配置屏幕、设置屏幕和管理屏幕,这是 IIS 所没有的。但是,它们彼此之间几乎是 100% 兼容的。 IIS express 和完整的 web 服务器之间需要 100% 的兼容性,否则你怎么能真正知道你在 asp.net 中编写的内容和计算机上的 IIS express 将在你部署到实际生产的 IIS web 服务器时工作托管您的网站?
所以要运行asp.net 网站?您需要 IIS,并且需要安装在该机器上的 .dll 和代码库,以支持您的 .net 代码的运行。 Web服务器和您的.net代码之间的舞蹈是如何从用户那里接受网页,处理,运行代码,然后在处理之后将网页的全新副本发送回客户端浏览器.此时,用户可以说输入一些数据,并在本地进行一些交互(javascript,或者现在的 Blazer 代码)。但是,任何提交按钮都会显示所有重要的回发。该回发是将页面回发到 Web 服务器的“行为”。 Web 服务器接收到该页面,然后开始处理背后的代码(包括您的 .net 代码),然后再次将页面发送回浏览器,这个“往返”过程再次完成。
所以不清楚为什么以周五几瓶啤酒的价格找不到低成本的托管网站。如前所述,您必须寻找一个 Windows 托管站点而不是 Linux 站点来运行 asp.net Web 应用程序。但如前所述,许多计划每月不到 10 美元。如前所述,您可以在您现在使用的计算机上运行 EXISTING IIS express 来与 VS 一起工作,但用户随后将通过 IP 地址访问网站(除非他们可能登录到具有域的同一网络的用户(然后他们可以使用计算机名称代替 IP 地址 - 但您当然没有可以输入的“URL”,除非该 URL 是 IP 地址。
那么就文件和嵌入式数据库之类的东西而言?您谈论的所有文件和 100% 的文件都是 Web 服务器独家使用的。用户在任何情况下都不会真正触摸、点击、加载、使用 aspx 网页,事实上即使他们在该网站上输入了指向 html 页面的 URL? Web 服务器去获取网页,加载它,处理它,然后将网页发送到客户端浏览器。在零情况下,客户端用户永远无法直接触摸/加载/查看网页,并且在其中存在未经处理的原始状态。网络服务器加载这些页面,然后将它们发送给客户端。
如前所述,您可以在浏览器中打开桌面上的静态网页,但因此,您没有交互式网页,也没有可以调用 + 使用 + 消费 .net 的网页您编写的代码和服务器 + 代码必须在往返之前处理该网页并将整个页面发送回客户端。
因此,对于任何类型的回发,这意味着另一端的 Web 服务器必须“存在”才能接受该回发。
如果没有可操作的 Web 服务器,您甚至无法思考或认为此类应用程序是可能的。如果没有这些,那么您的浏览器中将无法存在任何类型的回发代码 - 这在很大程度上意味着您没有任何真正的方法来构建基于 Web 的应用程序。
因此,本月少喝 4 杯啤酒,您将节省至少 2-3 个月的网络托管时间。
【讨论】:
你绝对是对的,但我想我可能会更好地表达我的问题。该网站将由大学托管。通过“无服务器”,我指的是外部服务器,我必须设置它,例如SQL Server 并使用连接字符串远程连接。 @LordRelix 关于 LocalDB 的评论正是我想要的。但是,我再次感谢您详细、翔实的回答。 是的,但即使是 csv 或文本文件?这只能发生在服务器端 - 而不是客户端,因为如前所述,服务器无法控制或弄乱客户端文件 - 无论是 csv 还是 sqLite 文件。以上是关于在没有外部数据库的情况下跟踪用户的操作的主要内容,如果未能解决你的问题,请参考以下文章
如何在不刷新php页面的情况下跟踪mysql数据库中的更改?