阻止用户在网站上多次登录

时间:2013-03-06 21:04:12

标签: ajax login coldfusion cfml

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

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

逻辑是:

会话超时为1小时。

当用户登录时,

  • 现在设置dtLogin = datestamp
  • dtLogLastUpdate = datestamp now
  • ip = user-ip
  • isLogged = 1

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

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

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

1 个答案:

答案 0 :(得分: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更新日志文件,从而减少后台进程。