0

TankAuth ライブラリがインストールされた Codeigniter を使用して、swfupload から index.php/requests/doUpload にアップロードしようとしていますが、認証済みとしてページにアクセスできません。同様の問題についてネット上で多くの投稿を読み、設定しようとしまし$config['sess_match_useragent'] = FALSE;たが、それでも違いはありません。テスト目的で、コントローラーのログインチェックをスキップしてしまいました。しかし、現在ログインしているユーザー ID を取得するには、コントローラーから tankAuth ライブラリにアクセスする必要があります。アプリケーションで要求され、スキップできません。ログインしたユーザー ID をその doUpload モデルに渡す必要があります。次のようにコントローラーをセットアップしました:

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 はセッションを削除しますが、ユーザー エージェントと一致しないように構成をセットアップしましたが、まだ機能していません。

これに対する解決策はありますか?

4

3 に答える 3

2

CIフォーラムのチュートリアルに従って、私はあなたが求めていることを達成することができました。
1)これをSWFUploadJS構成に入れます。

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

2)そしてMY_Session.phpファイルをあなたのapplication/libraries/フォルダに置きます。

3)ビューがロードされた瞬間に(何らかの理由で)新しいライブラリをロードしてから、コントローラーにライブラリをロードする必要があります。

PS:あなたは設定する必要があります:

$config['sess_match_useragent'] = FALSE;

それ以外の場合は、ユーザーエージェント用に新しいセッションが作成されますShockwave Flash

編集:さて、あなたのコメントに基づいて..あなたは本当にあなたの設定をあなたの現在のセッションに設定する必要があります。そうすれば、フラッシュがあなたのコントローラーに送られることができ ますpost_params。.js: post

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

そして、PHPビューで、この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ファイルを使用しているため、グローバル変数の定義を忘れる可能性があるため、次を使用します。

post_params: (typeof GLOBAL_VAR === 'undefined') ? {}:GLOBAL_VAR,
于 2011-01-05T01:43:22.277 に答える
0

ログに記録されたユーザー ID を URL に渡し、URL 関数を使用して Javascript から取得することで、大まかな修正を行うことができました。アプリの特定の部分を表示するために管理された iframe を使用しており、アプリは社内専用であるため、ユーザー ID が表示されることはあまり気になりません。 .

回答ありがとうございます。

于 2011-01-05T11:23:11.957 に答える
0

Flash ファイルは CI サイトと同じドメインから提供する必要があることに注意してください。そうしないと、一方が他方の Cookie を読み取ることができなくなります。また、ログイン Cookie パスがルート パスに設定されていることを確認してください。SWFUpload がログイン Cookie を読み取ることができない場合、それを送信することもできません。

ここ SWFUpload フォーラム に記載されているように、Flash はセッション Cookie へのアクセスが制限されています。(config/tank_auth.php で) 有効期限を設定しないように自動ログインを設定し、それによってセッション Cookie を作成した可能性はありますか? その場合、コンピュータの Flash Player のバージョンによっては、SWFUpload SWF が autologin Cookie 値にアクセスしたり、送信したりできない場合があります。Firebug などのデバッグ ツールを使用して、Cookie の有効期限の値を再確認し、これが当てはまるかどうかを確認します。「remember」ボックスをチェックするとアップロードが機能するが、それ以外の場合は機能しない場合は、セッション cookie に問題があることを示しています。

SWF がファイルのアップロード時に TankAuth Cookie 値を渡すようにするには、まず Cookie ヘルパーの get_cookie 関数をオーバーロードして、$_COOKIE 配列または $_POST 配列の値を調べます。次に、SWFUpload v2 を使用すると、upload とともに追加の POST 値を送信できるようです。これが自動ログイン キーを送信する方法となり、コントローラーが user_id を取得できるようになります。ただし、Cookie ヘルパーをハッキングする前に、最初の段落で説明したように、可動部分が機能していることを確認してください。

于 2011-01-04T23:54:07.567 に答える