'facebook'에 해당되는 글 3건

  1. 2010.04.09 Facebook에서 Session죽이기 2탄
  2. 2010.04.06 Facebook Session 죽이기
  3. 2010.03.31 Facebook-actionscript-api

[관련글] 2010/04/06 - [Flex/AIR/AS3/API 사용하기] - Facebook Session 죽이기

저번 포스트에서 Facebook에서 세션 끊는법을 URLLoader로 Logout 페이지에 API키와 세션키를 넘겨 끊는 법을 포스팅했는데 하다보니 더 확실한 방법이 있어 다시 포스팅합니다.

우선, Facebook 세션이 어떻게 이루어지는지 살펴볼 필요가 있는데 Facebook의 세션은 로컬 컴퓨터상 쿠키로 저장이 됩니다. 따라서 해당 값을 참조하여 해당값이 있다면 전에 저장된 값을 참조하여 Facebook이 자동로그인되게 되어 버리는데 AIR용 Facebook을 개발하게 될 경우 강제 종료나 기타 다른 원인으로 애플리케이션이 죽어버릴 경우 세션을 종료시키지 못하게 됩니다.

페이스북 API를 사용하여 로그인시 SharedObject를 사용하여 해당 로그인값을 참조하여 값이 있을 경우 별도의 로그인 없이 바로 로그인 되어지게 작성되어 있습니다.

[ 페이스북 API DesktopSessionHelper에 정의되어져 있는 login function ]
public function login(api_key:String=''):void { 
     if (api_key != '') { apiKey = api_key; } 
     if (apiKey == '') { throw new Error('Cannot login. No api_key specified.'); } 

     //check for existing LSO with sessionData
     sessionSO = SharedObject.getLocal(apiKey); 
                          
     if(sessionSO.data.session_key != null){ 
          populateSessionData(sessionSO.data); 
                          
          facebook = new Facebook(); 
          facebook.startSession(new DesktopSession(apiKey, sessionData.secret, sessionData.session_key));                  

          //check that the current session is still active  
          var call:FacebookCall = facebook.post(new GetLoggedInUser()); 
          call.addEventListener(FacebookEvent.COMPLETE, onValidateLoginSession, false, 0, true); 
     } else { 
          showLogin(); 
     } 
} 
위 내용을 보시면 facebook 로그인시 SharedObject.getLocal(apiKey)으로 세션값을 가져오는게 보입니다.
따라서, Facebook 로그인시 매번 새롭게 로그인 시킬 필요가 있을 경우 SharedObject에 있는 값을 Null로 만들어 버리면 세션이 저장되어서 로그인이 자동으로 되는걸 막을 수 있습니다.

[ 해결 방법 ]
protected const API_KEY:String = "API KEY 값";

protected var _session:DesktopSessionHelper; // Desktop Session Helper
protected var _so:SharedObject; // 로컬에 저장된 SharedObject
protected var _sessionKey:String; // 세션키

public function faceBookLogin():void
{
     // 로컬에 저장된 세션키 초기화 시켜버리기
     _so = SharedObject.getLocal(API_KEY);
     _so.data.session_key = null;

     // 세션 생성
     _session = new DesktopSessionHelper();
     _session.apiKey = API_KEY;

     // 이벤트 등록
     _session.addEventListener(FacebookEvent.COMPLETE, onFacebookHandler);
     _session.addEventListener(FacebookEvent.CONNECT, onFacebookHandler);
     _session.addEventListener(FacebookEvent.ERROR, onFacebookHandler);
     _session.addEventListener(FacebookEvent.LOGIN_FAILURE, onFacebookHandler);
     _session.addEventListener(FacebookEvent.LOGIN_SUCCESS, onFacebookHandler);
     _session.addEventListener(FacebookEvent.LOGIN_WINDOW_SHOW, onFacebookHandler);
     _session.addEventListener(FacebookEvent.LOGOUT, onFacebookHandler);
     _session.addEventListener(FacebookEvent.PERMISSION_CHANGE, onFacebookHandler);
     _session.addEventListener(FacebookEvent.PERMISSION_STATUS, onFacebookHandler);
     _session.addEventListener(FacebookEvent.PERMISSIONS_LOADED, onFacebookHandler);
     _session.addEventListener(FacebookEvent.PERMISSIONS_WINDOW_SHOW, onFacebookHandler);
     _session.addEventListener(FacebookEvent.VERIFYING_SESSION, onFacebookHandler);
     _session.addEventListener(FacebookEvent.WAITING_FOR_LOGIN, onFacebookHandler);

     // 로그인 시작
     _session.login();
}
위와 같이 _so.data.session_key = null; 을 해줌으로써 세션값을 초기화 시킬 수 있습니다.
저작자 표시 비영리
신고

'Flex/AIR/AS3 > API 사용하기' 카테고리의 다른 글

Google Weather API Image  (1) 2011.06.08
Facebook에서 Session죽이기 2탄  (0) 2010.04.09
Facebook Session 죽이기  (0) 2010.04.06
Posted by 코멧'★
  
Facebook API 사용시 Logout을 해도 세션이 죽지않고 계속 물고 있는 버그(?)가 있습니다.

이러한 경우 해결 방법으로 logout 페이지에 api key와 session key 값을 넘겨 세션을 죽일 수 있습니다.

    var urlLoader:URLLoader = new URLLoader();
    var urlRequest:URLRequest = new URLRequest();
    var urlVariables:URLVariables = new URLVariables();

    urlVariables.app_key = API_KEY;
    urlVariables.session_key = _session.sessionData.session_key;
    
    urlRequest.url = "http://www.facebook.com/logout.php";
    urlRequest.data = urlVariables;
    urlRequest.method = "GET";
    
    // 이벤트 등록
    urlLoader.addEventListener(Event.COMPLETE, onFaceBookLogoutHandler);
    urlLoader.addEventListener(IOErrorEvent.IO_ERROR, onFaceBookLogoutHandler);
    urlLoader.addEventListener(SecurityErrorEvent.SECURITY_ERROR, onFaceBookLogoutHandler);
    
    urlLoader.load(urlRequest);


위와 같이 logout 페이지로 GET 방식으로 app_key와 session_key 값을 넘겨 줌으로써 facebook 로그아웃이
세션이 죽지 않는 버그(?)를 해결할 수 있습니다.
저작자 표시 비영리
신고

'Flex/AIR/AS3 > API 사용하기' 카테고리의 다른 글

Google Weather API Image  (1) 2011.06.08
Facebook에서 Session죽이기 2탄  (0) 2010.04.09
Facebook Session 죽이기  (0) 2010.04.06
Posted by 코멧'★
TAG API, facebook
Flex/AIR/AS3/Library2010.03.31 10:22



이번 작업에 Social 부분이 있어서 Facebook 연동을 하기 위하여 찾아서 링크합니다.

http://code.google.com/p/facebook-actionscript-api/
저작자 표시 비영리
신고

'Flex/AIR/AS3 > Library' 카테고리의 다른 글

PureMVC Standard for AS3  (0) 2010.03.31
twitter-actionscript-api  (0) 2010.03.31
Facebook-actionscript-api  (0) 2010.03.31
Posted by 코멧'★
TAG API, facebook

티스토리 툴바