2011-05-15 3 views
2

사용자가 페이지를 요청하면 해당 사용자에 대해 세션이 시작될 때입니까? 내가 말할 수있는 것부터, 페이지 요청을하는 즉시 세션이 시작됩니다 ...ColdFusion : 세션 변수를 정의 할 시점은 언제입니까?

언제 이런 경우가 있습니까? 즉 사용자 이름, 비밀번호, 환경 설정 등 ... 언제든지 가능합니까?

답변

4

예 첫 번째 요청에서 사용자의 세션 범위가 설정됩니다. 그러나 다양한 플래그 및 값을 설정하려는 경우 사용자의 환경 설정에 따라 다릅니다. 당신은 아마 세션 범위에 패스워드를 넣고 싶지 않을 것이다.

사용자 구조에 사용자 특정 값을 넣는 것을 좋아합니다. 그래서 요청이 있으면 변수가 있는지 확인하고 설치가 존재하지 않으면 설치하십시오. 사용자가 좋은 점을 로그 아웃 할 때 예를 들어 ...

<cfif not structkeyexists(session, "user")> 
    <cfset session.user = { 
     authorized = false 
     , admin = false 
     , username = '' 
     , accountid = '' 
     <!--- etc ---> 
    } /> 
</cfif> 

이 때 사용자가 로그인 후 적절한 값을 입력 할 수 있으며 = session.user.authorized true로 설정

이 방법은 약 당신은 단지 사용자 구조체를 삭제할 수 있습니다.

<cfset structdelete(session, "user") /> 

다음 페이지에서 사용자 구조체에 대한 확인이 다시 수행되고 존재하지 않는 경우 작성됩니다.

+0

오, 나는이 접근법이 상당히 마음에 듭니다, 단. PHP에서는 세션이 시작하도록 특별히 명시해야만 세션이 시작됩니다. 그게 내 혼란을 일으켰습니다.하지만 응용 프로그램 시작 또는 세션 시작 내에 구조 생성을 넣지 않는 이유는 무엇입니까? – dcolumbus

+0

여기서 아이디어는 여러 사람이 세션을 기술적으로 공유 할 수 있다는 것입니다. 한 사람이 브라우저에 앉아서 사용하고 로그인하고 로그 아웃하면 ... 다른 사람이 앉아서 같은 세션에있는 ColdFusion에서 사용하기 시작합니다. OnSessionStart는 한 번만 해당 상황에서 두 번 발생하지 않습니다. 그래서 당신은 arching 세션이 시작되고 있는지 여부에 관계없이 존재하지 않으면 사용자 구조체를 다시 만들고 싶습니다. –

5

세션 변수를 구성하고 사용하는 기본 사항은 explained here입니다.

기본적으로 세션은 클라이언트와 응용 프로그램 간의 논리적 관계이므로 세션 변수는 클라이언트의 응용 프로그램에 대한 첫 번째 요청에서 사용할 수 있으며 일반적으로 세션을 고유하게 식별하는 쿠키를 사용하여 요청간에 지속됩니다. 또한 URL에 식별자를 전달하여 수행 할 수 있습니다. 세션 시간 제한 설정에주의를 기울일 필요가 있습니다. 예를 들어 쿠키를 설정하지 않은 봇/크롤러에게 더 짧은 시간 제한을 제공 할 수 있으므로 각 페이지 요청에 대해 새 세션을 시작합니다 (more details on this).