0

ファイルのアップロードを受け入れるレガシー(php)アプリケーションがあり、それらはセッションIDに応じたパスに保存されます。ここで、この Web アプリケーションに非常に単純な API を提供する必要がありました。この API では、iOS API (iPad) を介してファイルのアップロードが実行されます。お客様が埋め込まれた Webkit ウィンドウで開く URL を返します。

アップロード アクションとビュー アクションからのセッションは異なるため、セッション パラメーターを取得して、ファイル アップロードからの応答でそれを返すことを考えました。その後、クライアントはその URL にリダイレクトされます。セッション ID を以前の ID に設定し、顧客が作業を続行できるページに進みます。

どうやら、私が試したものは何も機能しません。Zend Framework 1 を使用していますが、それはあまり重要ではありません。私は試した:

  1. Set-Cookie ヘッダーの設定 (これにより、2 つの PHPSESSID 値を含む Cookie が生成されます)
  2. a を使用しsetcookie("PHPSESSID", $session, 3600)て PHPSESSID を設定します
  3. Zend http レスポンスをsetHeader('Set-Cookie', 'PHPSESSID=....', true)

セッションをまったく設定しなかったように、最後の 2 つのオプションは何もしません。どうすればこれを解決できますか? 実際には、従来のコード ベースにそれほど手を加えて、その動作を変更したり、ファイル アップロードのパス解決の動作を変更したりすることはできません。

したがって、フローは次のとおりです。 cookie を別のものに送信 -> Webkit がリダイレクトを実行 -> 顧客は、api.myapp.tld への最初のリクエストと同じセッション ID を持つページにアクセスします。

セッション ID を設定する別の方法があれば、それは素晴らしいことです。

4

2 に答える 2

0

私はより単純なもので終わった。セッションは、このようなパスに関連付けられていました/path/to/location/ . $sessionId。2 番目のセッションが開始されたとき、ディレクトリの名前を古いセッションから新しいセッションに変更しただけです。これを機能させるのは簡単かつ迅速です。

于 2012-07-13T20:48:13.447 に答える
0

デバッグするのは簡単ではありませんが、いくつかのオプションがあります。私は Zend Framework 1.x に精通していないので、これはフレームワーク固有ではなく (フレームワークは上に何かを追加することがあります)、PHP 固有です。

PHP では、セッションは次の 2 つの要素で識別されます。

  1. 名前(例: 一般的なデフォルト名はPHPSESSID)
  2. ID (これは乱数です)

名前は一度に複数のセッションを使用できるようにし、ID は特定のセッションを識別します。

2 つのセッション ID を並行して使用する必要があるように思えます。レガシー セッションを処理する必要があるスクリプトを作成して、現在のスクリプトとは別のセッション名を付けることをお勧めします。

その後、現在のセッションをそのままにしておくことができますが、他のセッション名を使用してレガシー/古いセッション ID を渡すことができます。

この情報がお役に立てば幸いです。それを実装するのに問題がある場合は、質問してください。

于 2012-07-09T23:13:41.663 に答える