我有一个人们评分论文的系统,有时候他们会离开键盘然后回来发帖 - 发现他们的会话已经过期了。当然所有数据都会丢失。
我想至少尝试保留一些(我有一些来自已发布表单数据/查询字符串的变量)。
你如何处理这些情况?如果他们没有保存,人们只是搞砸了吗?
答案 0 :(得分:1)
Caveatrob,在大多数情况下你是对的,用户被有效地搞砸了。增加超时是我过去做过的一件事。我可以想出三个让你前进的想法。
1)您可以尝试使用Global.asa中的Session_OnEnd函数。这将允许您在会话过期时运行一些代码。不幸的是,我认为它无法访问Request.form集合......从而打败了这一点。
2)如果你想谨慎对待,你可以随时将用户身份的加密形式存储在表格的隐藏变量中。这样,如果会话在下一页超时....你仍然可以找出谁提交了表格。显然,如果用户发现他们可以通过更改表单值来冒充用户,这会让您误以为是滥用。对他们的用户ID /用户名的良好加密可能就足够了。
3)最后,您可以更改保存机制,以便在用户输入时保存它们的值(可能通过AJAX或只需单击每行上的“保存”)。这样,如果他们填写半页,他们就已经将数据提交到数据库。
令人沮丧,我知道!
答案 1 :(得分:0)
有几个选择:
meta refresh
,以便会话保持活动状态meta refresh
相同,仅使用javascript(可能是ajax调用),每当鼠标移动或使用键盘时重置计时器答案 2 :(得分:0)
我们有一个包含很多向导的系统。我们编写了一些代码来执行以下操作:
如果用户注销,或者转到另一个目录(另一个向导),我们会删除该目录的向导变量。我们还设置了一个时间戳,因此我们可以在特定时间后删除孤立变量。
所有值都存储为文本,我们有一个函数库,可以将它们“转换”回正确的格式。日期存储为YYYY-MM-DD,因此它们总是正确显示,根据用户十进制设置恢复双打/浮点数。 这是经典的ASP,因此开发人员可以确保数据正确进出向导。 开发人员还必须记住哪个向导变量是一个文本,这是一个日期和之后。
这都是作为WSC实现的,因此很容易重用代码。
设置需要一些工作,但是在我们的案例中,有几十个向导使这成为一个非常舒适的解决方案。
HTH
答案 3 :(得分:0)
我使用来自小型内联框架的元刷新。只要在他们正在编辑的页面上,iframe页面就会保持刷新,使会话保持活动状态。
您也可以使用来自他们正在使用的页面的定时ajax请求来实现相同的功能。