如何在ASP Classic中处理会话到期(逻辑上)而不丢失数据?

时间:2011-11-06 21:31:21

标签: asp-classic

我有一个人们评分论文的系统,有时候他们会离开键盘然后回来发帖 - 发现他们的会话已经过期了。当然所有数据都会丢失。

我想至少尝试保留一些(我有一些来自已发布表单数据/查询字符串的变量)。

你如何处理这些情况?如果他们没有保存,人们只是搞砸了吗?

4 个答案:

答案 0 :(得分:1)

Caveatrob,在大多数情况下你是对的,用户被有效地搞砸了。增加超时是我过去做过的一件事。我可以想出三个让你前进的想法。

1)您可以尝试使用Global.asa中的Session_OnEnd函数。这将允许您在会话过期时运行一些代码。不幸的是,我认为它无法访问Request.form集合......从而打败了这一点。

2)如果你想谨慎对待,你可以随时将用户身份的加密形式存储在表格的隐藏变量中。这样,如果会话在下一页超时....你仍然可以找出谁提交了表格。显然,如果用户发现他们可以通过更改表单值来冒充用户,这会让您误以为是滥用。对他们的用户ID /用户名的良好加密可能就足够了。

3)最后,您可以更改保存机制,以便在用户输入时保存它们的值(可能通过AJAX或只需单击每行上的“保存”)。这样,如果他们填写半页,他们就已经将数据提交到数据库。

令人沮丧,我知道!

答案 1 :(得分:0)

有几个选择:

  • 延长超时时间
  • 使用会在超时前触发的meta refresh,以便会话保持活动状态
  • meta refresh相同,仅使用javascript(可能是ajax调用),每当鼠标移动或使用键盘时重置计时器

答案 2 :(得分:0)

我们有一个包含很多向导的系统。我们编写了一些代码来执行以下操作:

  1. 为每个唯一身份用户设置Cookie
  2. 将每个表单值存储在SQL中的简单键值表中,基于每个用户/每个目录库。 (因此每个用户都有一个每个目录的向导变量集合)
  3. 如果用户注销,或者转到另一个目录(另一个向导),我们会删除该目录的向导变量。我们还设置了一个时间戳,因此我们可以在特定时间后删除孤立变量。

    所有值都存储为文本,我们有一个函数库,可以将它们“转换”回正确的格式。日期存储为YYYY-MM-DD,因此它们总是正确显示,根据用户十进制设置恢复双打/浮点数。 这是经典的ASP,因此开发人员可以确保数据正确进出向导。 开发人员还必须记住哪个向导变量是一个文本,这是一个日期和之后。

    这都是作为WSC实现的,因此很容易重用代码。

    设置需要一些工作,但是在我们的案例中,有几十个向导使这成为一个非常舒适的解决方案。

    HTH

答案 3 :(得分:0)

我使用来自小型内联框架的元刷新。只要在他们正在编辑的页面上,iframe页面就会保持刷新,使会话保持活动状态。

您也可以使用来自他们正在使用的页面的定时ajax请求来实现相同的功能。