2011-08-19 3 views
3

내 서버의 단일 도메인에서 호스팅되는 Facebook 앱이 거의 없습니다. 동일한 사용자가 단일 세션에서 둘 이상의 내 앱에 액세스 할 수 있습니다. 한 앱의 일부 데이터가 다른 앱에 저장되지 않도록하려면 어떻게해야합니까? 사용자는 앱에서 단순히 탐색 할 수 있으므로 로그 아웃은 옵션이 아닙니다.한 서버에서 한 명의 사용자가 여러 PHP 세션을 처리하는 방법은 무엇입니까?

답변

8

각 앱마다 다른 session_name()을 사용하면 세션이 서로 효과적으로 작동하지 않게됩니다. 나는 사람이 세션 데이터를 사용하는 응용 프로그램을 포함 할 것이라고 생각할 수 있으며, 사용자의 세션 데이터에 잘못된 세션을 참조하면, 세션을 파괴

// Application 1 
session_name("APP1"); 
session_start(); 

// Application 2 
session_name("APP2"); 
session_start(); 
+0

). 나는 당신이 다른 세션 이름을 설정할 수 있다는 것을 몰랐다. 나는 그들이 각각의 특정 응용 프로그램에 묶여 있다고 추측하고 있습니까? – chustar

+1

각 응용 프로그램에 자체 세션 이름이 있으면 yes입니다. session_name은 기본적으로 세션 ID가 저장된 쿠키의 이름이됩니다. 따라서 각 앱마다 고유 한 세션 이름이 있으면 사용자는 앱당 하나의 쿠키로 끝나며 각 세션은 독립적입니다. 서로의 대안은 세션'$ _SESSION [ 'app1'] [...]','$ _SESSION [ 'app2'] [...]'등에서 하위 키를 사용하는 것입니다. –

0

그냥 생각해 보겠습니다. 앱마다 하위 도메인을 설정하고 싶을 수도 있습니다. 쿠키와 세션은 기능에 의존하기보다는 자동으로 완전히 분리됩니다 (session_name() 매뉴얼 설명에 표시된 한 사람처럼 느릴 수 있음).

또한 개별 하위 도메인은 사용자를 악용하지 못하도록합니다. 동일한 원산지 정책 때문입니다. (맞습니까?)

+0

그렇지 않습니다. 쿠키가 설정되는 방법에 따라 다릅니다. 일반적으로 상위 도메인에 설정되므로 site1.example.com의 쿠키에는 site2.example.com의 쿠키가 계속 표시됩니다. –

0

모든 응용 프로그램마다 다른 키를 사용하여 세션 섹션과 같은 것을 만들 수 있습니다. 키를 고유하게 만들면됩니다. 세션에 데이터를 저장할 때마다 적절한 섹션에 저장하십시오 (예 :

//save the ids into db or configuration file after it's generated 
$app1id = uniqid('fbApp'); 
$app2id = uniqid('fbApp'); 

//Save data for application 1 
$_SESSION[$app1id] = array('app' => 'data'); 

//Save data for application 2 
$_SESSION[$app2id] = array('app' => 'data'); 
관련 문제