2

特定のユーザー情報を$_SESSION変数に格納する Web アプリケーションの作成を開始しました。通常のもの - user_id、ユーザー名など

次に、変数を使用して特定のナビゲーション情報を保存し始めました。たとえば$_SESSION['organisation_id']、ユーザーがアプリケーション内のどこにいても、すべてのページ要求で「organisation_id」を解析する必要なく、「organisation_id」を任意のテーブルに簡単に追加できます (例: index.php?organisation_id=456&var2=6 または anotherpage.php)。 ?organisation_id=456&など)

ユーザーが新しいタブを開いて別の組織への移動を開始するまでは、すべてが面倒なので$_SESSION['organisation_id']、元のタブで新しい値を作成してエピックを作成することはできません。

私が考えることができる唯一の解決策は、organisation_id をアプリケーション内のすべてのフォームとナビゲーション要素に配置することに戻ることですが、ええ、もっとエレガントな解決策が必要だと思います。

通常、必要なものはすべて StackOverflow で見つかりますが、この質問に対する答えはまだわかりません!

4

6 に答える 6

0

そのユーザー名のオンブラーなどの間に値をセッションに保存し、次のタブをクリックする前に値を取得できます

(つまり)Jquery / Javascriptを使用すると、onblur中にusernameなどの値を取得して、セッションに保存できます。

于 2013-02-07T12:37:35.030 に答える
0

現在、問題を解決する方法はありません。しかし、将来同様の作業を避けるために、すべてのファイルを別々のインクルードに分割することをお勧めします。したがって、サイト全体にいくつかの変数を追加する必要がある場合でも、すべてをやり直すよりも、1 つのファイルを変更するだけで完了できます。

于 2013-02-07T12:31:06.223 に答える
0

「私が思いつく唯一の解決策は、organisation_id をアプリケーション内のすべてのフォームとナビゲーション要素に入れることに戻ることですが、ええ、もっと洗練された解決策が必要だと思います。」

いいえ、ありません。

于 2013-02-07T12:23:29.367 に答える
0

$_SESSION['organisation_id'] が存在するかどうかを確認できます。存在する場合は、セッションに別の名前で新しい変数を書き込むことができます。

于 2013-02-07T12:28:00.223 に答える
0

これはロジックの問題だと思います。セッションは、ユーザーの状態を表します。これは、HTTP が本質的にステートレス プロトコルであるためです (誰が誰であるかがわからず、要求と応答を無視するだけです)。

状態organization_idです。_ ユーザーが 1 つの組織にのみログインできる場合は、これをセッション変数に保存して使用するだけです。ユーザーがログアウトして別の で再度ログインした場合organization_id、最後の 1 つだけが利用可能であることが理にかなっています。

アプリケーションが複数の をサポートするorganization_id必要がある場合は、そのロジックをセッション処理に反映して、たとえば (1 つだけではなく) 組織 ID の配列を保存する必要があります。ただし、アプリケーションを変更して、ユーザーが組織間を移動できるようにする必要があります。画面に 1 つの組織しか表示されていない場合、ユーザーが一度に 2 つの組織にいることを許可しても意味がありません。

于 2013-02-07T12:33:01.523 に答える
0

現在配列に入れているデータを$_SESSION内のサブ配列に移動するだけで、これを解決できます。これにより$_SESSION、セッションで一度に複数のデータ セットを保存できます。

最終的には次のようになります。

$_SESSION[organisations] = array(
     '456' => array('organisationID'=>456, 'otherdata'=>'blah'),
     '678' => array('organisationID'=>678, 'otherdata'=>'blah'),
     ...etc...
);

これにより、一度に複数の組織のデータをセッション データに保持できるため、毎回すべてのデータをロードする必要がなくなります。

ただし、セッション データのどの要素を処理するかをコードが認識できるように、リクエストごとに関連する組織 ID を送信する必要があります。あなたは本当にそれを回避することはできません. すべてのリクエストで、使用する orgID を PHP に伝える必要があります。

ここでの欠点は、すべてのデータをセッションに保存することで、セッション データにより多くのメモリを使用することです。そのため、ユーザーがセッション中に多くの組織を閲覧する可能性がある場合は、$_SESSIONしばらく使用されていないデータを削除してサイズを制限します。

もう 1 つの欠点は、これがマルチユーザー システムの場合、データをセッションに保存すると、他のユーザーによる更新が認識されないことです。リクエストごとにデータベースから新鮮なデータをロードする場合、DB の作業が増えますが、ユーザーに提供されるデータが常に最新であることが保証されます。

于 2013-02-07T12:41:15.307 に答える