2010-12-09 5 views
0

TankAuth 라이브러리가 설치된 상태에서 Codeigniter를 사용하고 swfupload에서 index.php/requests/doUpload에 업로드를 시도하고 있지만 인증 된대로 페이지에 액세스 할 수 없습니다. 나는 비슷한 문제에 대해 그물 주변의 많은 게시물을 읽고 $config['sess_match_useragent'] = FALSE;을 설정하려했지만 여전히 차이가 없다. 테스트 목적으로 내 컨트롤러에서 로그인 체크를 건너 뛰었습니다. 하지만 지금은 내 컨트롤러에서 tankAuth 라이브러리에 액세스하여 현재 로그인 한 사용자 ID를 가져와야합니다. 그것은 내 응용 프로그램에서 요청하고 그것을 건너 뛸 수 없어, 정말 그 doUpload 모델에 로그인 한 사용자 ID를 전달해야합니다. 나는이 같은 설정 컨트롤러가 : 나는 다른 게시물에서 배운 지금Codeigniter + TankAuth + Swfupload가 로거 사용자 ID를 가져올 수 없습니다.

function doUploadFileFn() { 
     if (!$this->tank_auth->is_logged_in()) { 
      return; 
     } else { 
      $user_id = $this->tank_auth->get_user_id(); 
      $this->load->model('requests/doUploadFile'); 
      $this->doUploadFile->uploadData($user_id); 
      } 

    } 

, 그것은합니다 (is_logged_in를 통과하지 않음) 확인을, CI 세션을 삭제하지만하지만 사용자 에이전트를 일치하지 않는 구성 설정을 가지고 그래도 작동이 안되는.

거기에 어떤 해결책이 있습니까?

답변

2

CI forums의 자습서를 따르면 나는 당신이 원하는 것을 얻을 수있었습니다.

post_params: {"<?php echo $this->config->item('sess_cookie_name'); ?>" :"<?php echo $this->session->get_cookie_data(); ?>"}, 

2) 그리고 당신의 application/libraries/ 폴더에 MY_Session.php 파일을 배치 :
1) SWFUpload JS의 설정이 넣습니다.

3)보기가로드 될 때 새 라이브러리를로드해야합니다 (어떤 이유로)로드 한 다음 컨트롤러에 라이브러리를로드하십시오.

PS :

그렇지 않으면 새로운 세션은 사용자 에이전트 생성됩니다
$config['sess_match_useragent'] = FALSE; 

Shockwave Flash

편집 : 좋아, 당신의 comment..you에 따라 정말 설정해야합니다 당신은 설정해야합니다 귀하의 post_params 설정을 귀하의 현재 세션으로 설정하면 post 번 플래시가 귀하의 컨트롤러에 전송 될 수 있습니다. 귀하의 경우 지금 내가 생각할 수있는 최선의 방법은 다음과 같습니다 :
externalUntouchableJsFile.JS :

<script> 
var GLOBAL_VAR = {}; 
<?php if(session_is_there) { ?> 
GLOBAL_VAR = {"<?php echo $this->config->item('sess_cookie_name'); ?>" :"<?php echo $this->session->get_cookie_data(); ?>"} 
<?php } ?> 
</script> 
<script type="text/javascript" src="<?php echo base_url() ?>path/to/js/externalUntouchableJsFile.js"></script> 

편집 2 :

// JS scripts... ... var swfu = new SWFUpload({ ... ... post_params: GLOBAL_VAR, ... }); ... // rest of your JS 

그리고 당신의 PHP보기 및 로딩이 파일 JS 전에

같은 것을 가지고 당신이 JS 외부 파일을 사용하고 있기 때문에
, 당신이 정의하는 것을 잊지 수 있습니다 글로벌 변수 때문에 사용 :이에 대한 대략적인 수정 프로그램을 적용하는 데 성공했다

post_params: (typeof GLOBAL_VAR === 'undefined') ? {}:GLOBAL_VAR, 
+0

JS 파일을 사용하여 스크립트를 시작하고 PHP 파일을 사용하지 않기 때문에이 구성을 이미 가지고 있습니다. 단지 매개 변수를 전달할 수 없습니다. 나는 그런 변수를 가져올 수 없다. 단지 JS 헤더가있는 PHP 파일을 사용하는 경우에만이 방법을 사용하지만이 방법을 사용하지 마십시오. 감사. –

+0

노력에 감사드립니다. 이 작동합니다. –

+0

도움이 되니 기쁩니다! :-) – ifaour

0

플래시 파일은 CI 사이트와 동일한 도메인에서 제공되어야하며 그렇지 않으면 다른 사용자의 쿠키를 읽을 수 없다는 점에 유의해야합니다. 또한 로그인 쿠키 경로가 루트 경로로 설정되어 있는지 확인하십시오. SWFUpload가 로그인 쿠키를 읽을 수 없으면 보낼 수도 없습니다.

플래시는 세션 쿠키에 대한 액세스가 제한되어 있습니다 (as documented here in the SWFUpload forum). 자동 로그인을 설정하여 만료 (config/tank_auth.php에서)를 설정하지 않도록하여 세션 쿠키를 만들 수 있습니까? 이 경우 SWFUpload SWF는 컴퓨터의 Flash Player 버전에 따라 자동 로그인 쿠키 값에 액세스하거나 보내지 못할 수 있습니다. 파이어 버그와 같은 디버그 도구를 사용하여 쿠키 만료 값을 다시 확인하십시오. "업로드"확인란을 선택했을 때 업로드가 작동하지만 그렇지 않은 경우 세션 쿠키 문제가 있음을 나타냅니다.

SWF가 파일 업로드시 TankAuth 쿠키 값을 전달하도록하려면 먼저 쿠키 도우미 get_cookie 함수를 오버로드하여 $ _COOKIE 배열이나 $ _POST 배열에서 값을 찾습니다. 그런 다음 with SWFUpload v2 you can send additional POST values along with the upload이 나타나고이 키를 보내면 컨트롤러가 user_id를 가져올 수 있습니다. 그러나 쿠키 도우미를 해킹하기 전에 첫 번째 단락에서 설명한대로 움직이는 부분이 먼저 작동하는지 확인하십시오.

0

Javasc에서 그것을 URL에 로그인 한 사용자 ID를 전달하고 얻어서 URL 기능을 가진 ript. 지금 당장은 의지 할 수있는 최선의 방법입니다. 관리되는 iframe을 사용하여 앱의 특정 부분을 표시하고 앱이 내부 회사에서만 사용하기 때문에 사용자 ID가 표시되는 것이 너무 걱정스럽지 않습니다. .

답장을 보내 주셔서 감사합니다.

관련 문제