我正在认真考虑从CF8 cflogin移开,因为它与产生登录的服务器绑定。在负载平衡的环境中,如果您不执行自定义实现,则会陷入粘滞会话。是否需要CFLogin替换或缺少某些东西?
有没有人有模仿CFLogin的任何来源,写入并从客户端范围管理?甚至可能是一个与isuserin [任何]角色的重命名替换相匹配的设计。
当我考虑为CFLogin编写替代实现时应该考虑什么?
我正在认真考虑从CF8 cflogin移开,因为它与产生登录的服务器绑定。在负载平衡的环境中,如果您不执行自定义实现,则会陷入粘滞会话。是否需要CFLogin替换或缺少某些东西?
有没有人有模仿CFLogin的任何来源,写入并从客户端范围管理?甚至可能是一个与isuserin [任何]角色的重命名替换相匹配的设计。
当我考虑为CFLogin编写替代实现时应该考虑什么?
这是一个基本的非cflogin
方法使用存储在CLIENT范围内的变量。我们在负载均衡器后面的服务器集群中使用类似的方法进行非粘性会话。
此代码应该生活在Application.cfc
- >onRequestStart()
方法:
<!--- handle login *post* --->
<cfif structKeyExists(FORM, "pageaction") and FORM.pageAction eq "adminlogin">
<!--- attempt to log user in --->
<cfif loginSuccessful>
<!--- Set client variables for session management --->
<cfset CLIENT.lastHit = now() />
<cfset CLIENT.loggedIn = 1 />
<!--- redirect to home page --->
<cfelse>
<!--- redirect to login page with message --->
</cfif>
<!--- all other requests, except for the login page --->
<cfelseif structKeyExists(CLIENT, "lasthit") and structKeyExists(COOKIE, "cfid") and structKeyExists(CLIENT, "cfid") and listLast(CGI.SCRIPT_NAME, "/") neq "login.cfm">
<!--- Check for timeout --->
<cfif (datediff("n", CLIENT.lastHit, now()) lte 10) and (CLIENT.loggedIn is 1) and (CLIENT.cfid is COOKIE.cfid)>
<!--- record last hit --->
<cfset CLIENT.lastHit = now() />
<cfelse>
<!--- timeout! redirect to login page --->
<cflocation URL="http://mydomain/login.cfm" addtoken="false" />
</cfif>
</cfif>
有用户角色的东西,但我希望这有助于为出发点。
我通过Dreamweaver自定义CF登录向导以便于移植并使用数据库表进行身份验证和角色管理。因此,我可以使用它作为单用户登录或多个帐户登录。我从来没有使用过cflogin,也没有必要。我只是将文件放到目录中,自定义登录凭证,就是这样。每次都很完美。
我所做的主要区别是我不会重定向到登录页面。我包括它和cfabort。这样,当用户发送正确的凭证时,他就在他想要的地方。 – 2010-11-22 16:35:47