19

uploadifyを使用していますが、phpファイルにセッションを設定できません。スクリプトは次のようになります。

    $("#uploadify").uploadify({
        'uploader'       : '/extra/flash/uploadify.swf',
        'script'         : '/admin/uploads/artistsphotos',
        'scriptData'     : {'PHPSESSID' : '<?= session_id(); ?>'},
        'cancelImg'      : '/images/cancel.png',
        'folder'         : '/img/artists',
        'queueID'        : 'fileQueue',
        'auto'           : false,
        'multi'          : true,
        'onComplete'     : function(a, b, c, d, e){

        },  
        'onAllComplete': function(event,data){
            $bla = $('#art').find(':selected',this);
            $fi  = $bla.val();
             $.ajax({
               type: "POST",
               url: "/admin/uploads/artistsphotosupload",
               data: "artist="+$fi,
               success: function(msg){
                 console.log(msg);
               }
             });
     }
});

そして、PHPで試してみると:

$_SESSION['name'] = 'something';

別のファイルでアクセスできません。session_start();があります。有効化されたソリューションはありますか?

4

11 に答える 11

11

uploadifyにはFlashPlayerによって作成された独自のセッションIDがあるため、これを解決することはできません。つまり、Flash Playerは、新しいユーザーとしてuploadifyスクリプトにアクセスし、新しいセッションを取得します。これを解決できる唯一の方法は、現在のページsession_idをpostを介してuploadifyスクリプトに渡すことです。

于 2009-12-18T17:09:41.413 に答える
8

通常、セッションIDはPOSTから読み取られません。あなたはこれを行うことができます:

$_COOKIE['PHPSESSID'] = $_POST['PHPSESSID'];
session_start();
于 2009-08-16T16:38:19.703 に答える
7

特にログイン用のセッション指向のPHPバックエンドがすでにある場合など、実装がはるかに簡単なソリューションを見つけました。

jQueryステートメントに次のコードを記述するだけです。

'script'    : '/upload.php?<?= session_name(); ?>=<?= session_id(); ?>',

これにより、現在のセッション名とセッションIDが魔法のように付加されます。

于 2010-01-14T08:25:18.077 に答える
6

これはうまくいくかもしれませんが、セキュリティの観点からは本当に悪い習慣です。これにより、有効なsessionIDを持つユーザーは、sessionidを変更するだけでそのセッションを偽装できます。秘密鍵(バックエンドコードにのみ知られている)を使用してセッションIDの基本的な同期暗号化を実行し、upload.phpスクリプトで復号化することをお勧めします。

于 2010-01-17T22:52:03.117 に答える
3

私は現在、uploadify+PHPセッションで同様の問題を抱えています。

error_log()を使用すると、uploadify flashアプリがファイルデータをサーバーに送信するときに、正しいsession_idがアップロードスクリプトに渡されることを監視できます。

'scriptData':{'session_id':session_id}、

(以前に設定されたsession_id:var session_id ='';)

つまり、はい、私のページのセッションIDとuploadifyスクリプトのセッションIDが実際に同じであることを確認できます。

しかし、スクリプトが実行され、次の方法でセッションを開始すると、次のようになります。

session_id($ session_id); session_start();

どういうわけか、すべてのセッションデータが破棄されます(セッションデータを配列に設定しているので、リクエストごとにデータが更新されて成長するのを見ることができます。その後、uploadifyを使用すると、データが消去されます)。

これをデバッグする方法がわかりません:/

編集:suhosinはセッションを破壊している可能性があります:

http://www.uploadify.com/forum/viewtopic.php?f=7&t=2062

于 2009-10-20T05:03:50.030 に答える
3

uploadifyの実装を使用して、外部の.jsファイルの前にこれを追加します。

<!-- Get sesssionId -->
 <script type="text/javascript" charset="utf-8">
  var sessionId = "<?php echo session_id(); ?>";
 </script>

次に、これをuploadifyスクリプトに追加します。

$('#uploadify').uploadifySettings('scriptData', {'sessionId': sessionId});

PHPアップロードスクリプトにはこれが必要です。

// Start session
 session_id($_POST['sessionId']);
 session_start();

全部終わった!

于 2010-05-27T11:40:31.970 に答える
2

セキュリティと方法の両方に関するすべての素晴らしい回答を読んだ後、私は問題を自分のやり方で回避しました。他の人の利益のためにここに投稿します。解決策の一番下までスキップしてください。重要なのはそれだけですか?;)。

Uploadifyは、独自のデフォルトセッションを使用します...

これは、uploadify.phpにアクセスするときに、以前に保存したセッション変数に現在の(uploadify)セッションからアクセスできないことを意味する煩わしさです。基本的に、作成したセッションとはまったく関係のないセッションオブジェクトを見ています。ああ、それで私たちは何をしますか、それをjavascriptに通しますか?

javascriptを介してセッションへの参照を「渡す」ことができますが、javascriptはクライアント(ユーザー)側であるため、ユーザーはセッション参照をサーバーに送信する前に変更できます。彼は事実上自分のセッションIDを偽造することができました。少なくとも私のアプリケーションの場合、これは実際には恐ろしく危険です。

ソリューション...

AFAIKがIDで参照できないデフォルトのsession_start()を単独で使用しないでください。代わりに、session_start()を使用するたびに、使用するセッションのIDを設定します(これは、今では関係なく、良い習慣だと思います)。

あなたがセッションを開始したいすべての単一の時間

session_id( "IDHere");

session_start();

重要:ユーザーごとに一意のセッションを設定します。

セッションは、サーバーと、無謀な放棄で接続している他のすべてのクライアントとの間で共有される変数です。サイトの個々のユーザーに固有のセッション変数を保存する場合、session_idは、そのユーザーに対して完全に一意の動的IDである必要があります。これには、Cookieから、またはより安全にデータベース(ユーザーの一意のID?)からアクセスできます。

編集:少し調べたところ、デフォルトのセッション(IDなし)はsessionID「PHPSESSID」を使用しているようです。したがって、まだ試していませんが、uploadify.phpでセッションを開始する前に、session_id( "PHPSESSID")を設定すると、問題が解決する場合もあります。

ただし、プラグインが同じセッション内で同じセッション変数を使用している場合は、問題が発生する可能性があるため、とにかく独自のIDを使用してセッションを作成することをお勧めします。

于 2012-04-06T12:01:57.043 に答える
1

ドキュメントにラベルを非表示にしますid = "id_usuario_logueado" and value $_SESSION[id]

jQueryステートメントに次のコードを記述するだけです。

'scriptData': {'id_usuario':$('#id_usuario_logueado').text()},

後でphpで

$id_usuario = $_POST['id_usuario'];

于 2011-12-15T23:18:33.590 に答える
0

私は解決策を見つけました。バックエンドスクリプトに認証とリダイレクトが必要な場合は、302の問題が発生します。認証を必要としない新しいコントローラーまたはスクリプトを作成するだけです。

次に、上記のコードから'script':'/ admin / uploads / Artistsphotos'を変更し、'script':'/ admin / uploads-unprotected / Artistsphotos / id = <?php echo md5($ theUserSessionId);に変更します。?>'、

次に、バックエンドスクリプトで、渡されたIDを確認し、別の戦略でアップロードリクエストを認証します。

于 2010-11-10T21:13:39.413 に答える
0

これがuploadifyからの直接の答えです:Uploadifyでのセッションの使用

.phpajaxを呼び出すあなたの中で:

'scriptData': {'<?php echo session_name();?>':'<?php echo session_id();?>'},

そしてあなたのuploadify.php(受け取り/保存プログラム)

$session_name = session_name();

if (!isset($_GET[$session_name])) {
    exit;
} else {
    session_id($_GET[$session_name]);
    session_start();
}

私は2.1.4を使用していますが、これはセッション変数の魅力のように機能します。

于 2016-12-19T02:44:46.290 に答える
-3
$(document).ready(function() {



nombre = $('#uploadify1').val(); //first input

autor = $('#uploadify1').val();   // second one



$("#uploadify").uploadify({

    'uploader'       : UPLOADIFY_URL+'scripts/uploadify.swf',

    'script'         : 'ticket_docs_uploadify.php',

    'cancelImg'      : UPLOADIFY_URL+'cancel.png',

    'folder'         : 'ticket_document_uploads',

    'queueID'        : 'fileQueue',

    'checkScript'    : 'ticket_docs_check.php?nombre='+nombre+'&autor='+autor,

    'fileDesc'       : 'I am testing uploadify',

    'buttonText'     : 'Upload',

    'scriptData'     : {'sessTempTickedId': '<?php echo $_SESSION['sessTempTickedId'];?>', 'pkEmployeeID': '<?php echo $_SESSION['pkEmployeeID'];?>', 'EmployeeDepartment': '<?php echo $_SESSION['EmployeeDepartment'];?>' },

    'auto'           : false,

    'multi'          : true,        

    'onComplete'     : function(a, b, c, d, e){

        //alert(a+b+c+d+e);

    },

    'onAllComplete': function(event,data){

        //something here             alert('asdasd');             alert(json_decode(data));            

    }

});

});



<?php include_once('../../common/inc/connectdb.inc.php');

if (!empty($_FILES))

{

$tempFile = $_FILES['Filedata']['tmp_name'];

$targetPath = $_SERVER['DOCUMENT_ROOT'] . $_REQUEST['folder'] . '/';

//change the file name here



$fileName = time();



$arrFile = pathinfo($_FILES['Filedata']['name']);



$strFileExt = strtolower($arrFile['extension']);



$strFileName = $arrFile['filename'];



$strFileBaseName = $arrFile['basename'];



$fileName = $fileName.'.'.$strFileExt;



$targetFile = str_replace('//','/',$targetPath) . $fileName;



$sql = "INSERT INTO ticket_documents (fkTicketID,fkEmployeeID,fkDepartmentID,TicketDocumentName,TicketDocumentLabel) VALUES ('".$_POST['sessTempTickedId']."','".$_POST['pkEmployeeID']."','".$_POST['EmployeeDepartment']."','".$fileName."','".$_FILES['Filedata']['name']."')";

mysql_query($sql) or die(mysql_error());



move_uploaded_file($tempFile,$targetFile);

echo "1";

}

?>
于 2010-07-13T11:49:03.290 に答える