【发布时间】:2011-11-19 10:56:52
【问题描述】:
在经典网站的会话变量中保存数据的最佳方式是什么?
我正在维护一个经典网站,并希望能够让我的用户演示网站的所有功能,这意味着允许他们删除记录。
到目前为止,我看到的壁橱示例是 Telerik 控件的演示,它们在首次加载时将数据集保存在会话中并允许用户操作数据。
如何在带有 MS Access 后端的 ASP 中实现同样的效果?
【问题讨论】:
标签: session asp-classic dataset
在经典网站的会话变量中保存数据的最佳方式是什么?
我正在维护一个经典网站,并希望能够让我的用户演示网站的所有功能,这意味着允许他们删除记录。
到目前为止,我看到的壁橱示例是 Telerik 控件的演示,它们在首次加载时将数据集保存在会话中并允许用户操作数据。
如何在带有 MS Access 后端的 ASP 中实现同样的效果?
【问题讨论】:
标签: session asp-classic dataset
如果您想在多个页面上保持状态(例如,演示完整的应用程序),那么这有点棘手。
我建议为每个会话复制 MDB 文件并使用复制的版本。这将确保每个会话都使用自己的数据。
注意:然后我可以在这里看到的唯一缺点是您需要删除未使用的 MDB 文件,因为它会在一段时间后得到很多。您可以通过计划任务甚至在创建新任务之前的会话开始时执行此操作。
我不确定您可以使用什么来检查它是否已使用,但请检查文件创建日期,或者 LDF 文件也可以帮助您(如果它不存在 = 未使用)。
【讨论】:
您可以在会话变量中存储连接或包含对象,只要您记得在检索时存储的是哪种变量即可。我从未将数据集存储在会话变量中,但我在会话变量中存储了很多数组,因此您可以使用 ADO Getrows method 将完整的数据集定位到会话变量中。
【讨论】:
Access 数据库有多大?如果您的数据库足够小(相对于服务器容量、预期用户数量等),那么我喜欢为每个运行演示的用户使用数据库的新副本。
使用这种方法,您可以简化可能的代码路径。否则这“我们是否处于演示模式?”逻辑会渗透到你的大量代码中。
我会这样做......
当用户开始演示时,制作一份 Access DB 副本供该用户使用。如果您的数据库是 foo.mdb,请将其复制到 /tempdb/foo_1234567890.mdb,其中 1234567890 是用户的会话 ID。
更改用户的连接字符串以指向新的数据库副本。从此时起,您的应用无需进一步修改即可像“正常”一样运行。
有一个计划任务删除 /tempdb 中最后修改时间超过 __ 小时的所有文件。如果您无法在服务器上安排任务(可能您处于共享托管环境等),那么您可以在执行步骤 1 的同时执行此操作。
【讨论】: