我想阻止用户同时多次访问我的ColdFusion应用程序。
我有一个带有dtLogin,dtLogLastUpdate,ip和isLogged的SQL表。
逻辑是:
会话超时为1小时。
当用户登录时,
我正在使用AJAX调用每1分钟更新一次dtLogLastUpdate
。
当我收到用户的登录请求时,只有在isLogged
为0或dtLogLastUpdate
超过我过去的会话超时时才允许。
如何管理用户关闭浏览器但之前未注销的情况?他们是否需要等到会话超时?
答案 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更新日志文件,从而减少后台进程。