2009-04-03 5 views
3

여러 CF8 서버가있는 경우 한 서버에서 사용자가 로그인 할 수 있지만 모든 서버간에 로그인 자격 증명을 공유 할 수 있습니까 (재 로그인 필요 없음)?ColdFusion 서버간에 로그인 자격 증명을 공유합니까?

+0

세부 정보를 추가 할 수 있습니까? 클러스터 설치 양식이 있습니까? 아니면 완전히 별개의 응용 프로그램입니까? –

답변

7

아마도 공유 세션에 관한 질문입니까? 이것은 일련 번호 J2EE sessions을 사용하거나 공유 client variables을 사용하여 수행 할 수 있습니다.

예를 들어, 다음과 같이 수행 할 수 있습니다.

서버 중 하나에서 빈 데이터베이스를 만듭니다 (MySQL을 만들었습니다). 모든 CF 서버에서이 DB를 가리키는 데이터 소스를 만듭니다. 이 데이터 소스를 서버 설정> 클라이언트 변수> 클라이언트 세션 저장 영역 이름으로 사용하십시오. SharedSessions (나중에 사용합니다).

<cfdump var="#getAuthUser()#"> 
<cfdump var="#CLIENT#"> 
:이 두 서버에서 동일하게 보여 이제

<cfapplication 
    name="shared_session_test" 
    sessionManagement="true" 
    clientmanagement="true" 
    clientstorage="SharedSessions" /> 

<cflogin> 

    <cfif IsDefined("cflogin") and cflogin.name eq "admin" and cflogin.password eq "admin"> 
     <cfset user_roles = "administrators" /> 
     <cfset user_name = cflogin.name /> 
     <cfset user_password = cflogin.password /> 
    </cfif> 

    <cfif IsDefined("user_roles")> 
     <!--- push login params into shared client scope ---> 
     <cfset CLIENT.user_roles = user_roles /> 
     <cfset CLIENT.user_name = user_name /> 
     <cfset CLIENT.user_password = user_password /> 
    <cfelseif IsDefined("CLIENT.user_roles")> 
     <!--- restore login params from shared client scope ---> 
     <cfset user_roles = CLIENT.user_roles /> 
     <cfset user_name = CLIENT.user_name /> 
     <cfset user_password = CLIENT.user_password /> 
    </cfif> 

    <cfif IsDefined("user_roles")> 
     <cfloginuser name="#user_name#" password="#user_password#" roles="#user_roles#"> 
    <cfelse> 
     <!--- authentication failed - send back 401 ---> 
     <cfsetting enablecfoutputonly="yes" showdebugoutput="no"> 
     <cfheader statuscode="401"> 
     <cfheader name="WWW-Authenticate" value="Basic realm=""MySecurity"""> 
     <cfoutput>Not authorized</cfoutput> 
     <cfabort /> 
    </cfif> 

</cflogin> 

<cfoutput><p><a href="http://other.server.com/index.cfm?#CLIENT.urltoken#">other.server.com</a></p></cfoutput> 

: 우리가 모든 서버에 Application.cfm의에서으로 cflogin를 사용하는 경우

,이 코드는이 (간체) 방법을 볼 수 있어요

물론, 여기에 할 일이 많아서 프로세스가 더 좋고 안전 해졌습니다. 일반적인 아이디어를 설명했습니다.

희망이 도움이됩니다.

+1

은 우수하고 매우 깨끗한 기록이었습니다. +1 – rip747

+0

이 솔루션은 CF 인스턴스가 모두 동일한 서버 또는 클러스터 된 경우에만 작동합니다. – Henry

+0

@Henry이 솔루션을 다른 서버에 사용했습니다. 더구나, 그들 중 하나는 Linux 상자에 있었고 다른 하나는 Win3k에있었습니다. Shared DSN이 하나이기 때문에 동일한 데이터 센터에 있다고 말하면서 (충분히 빠른) 액세스 권한이 있어야합니다. Havent는 군집 해 보았습니다, 미안 해요. – Sergii

관련 문제