0

我想阻止用户同时多次访问我的 ColdFusion 应用程序。

我有一个带有 dtLogin、dtLogLastUpdate、ip 和 isLogged 的​​ SQL 表。

逻辑是:

会话超时为 1 小时。

当用户登录时,

  • 现在设置 dtLogin = 日期戳
  • dtLogLastUpdate = 现在的日期戳
  • ip = 用户 IP
  • isLogged = 1

我正在使用 AJAX 调用dtLogLastUpdate每 1 分钟更新一次。

当我收到用户的登录请求时,只有在isLogged0 或 dtLogLastUpdate超过我过去的会话超时时才允许它。

当用户关闭浏览器但之前未注销时,我该如何管理?他们是否需要等到会话超时?

4

1 回答 1

2

我将创建一个名为 currentUsers 的应用程序变量。

您可以使用数组或列表,我认为数组函数更快,但根据您的 ColdFusion 版本,搜索数组可能会很痛苦。为简单起见,我将使用列表函数。

当用户尝试登录时,请检查用户名列表。如果不存在,则将用户名添加到列表中并允许他们登录。如果用户名存在,则将其发送到默认的“太糟糕了,太难过了”登录页面。

<cfif listFindNoCase(application.currentUsers, form.userName)> 
    <cflocation url = "shameOnYou.cfm">
<cfelse>
    <cfset listAppend(application.currentUsers, form.userName)>
    <cfset session.whatever>
</cfif>

在您的 application.cfc 中,使用 onSessionEnd 从列表中删除用户名。

<cffunction onSessionEnd...>
    <cfset listDeleteAt(application.currentUsers,listFind(application.currentUsers, session.userName))>
</cffunction>

这样做的好处是您不需要每 60 秒使用 AJAX 更新日志文件,从而减少后台进程。

于 2013-03-06T22:10:31.480 回答