0

私はサーブレットを実装しており、PHP サイトはそのサーブレットにアクセスしてデータを取得しています。セッション変数を保存する最良の方法は何か、またはそれを保存する必要があるかどうか疑問に思っています。

格納する必要がある変数には、ArrayList やその他のオブジェクトが含まれます。

私は約3つの可能性を考えました:

(1) HttpSessionListener を実装し、各セッション (作成時に) を静的な SessionMap に格納します。次に、セッションが破棄されたら削除します。

(2) すべてを JSON に格納します。そのため、各オブジェクトをシリアル化/逆シリアル化し、前後に渡す必要があります。(ユーザーのクリック間で追跡したい各 ArrayList/Object にアイテムのリストがあります。)

(3) 主キーとして SessionID を使用して、MongoDB に情報を保存します (1 つを選択するだけです)。

皆さんはどう思いますか?

4

2 に答える 2

0

私はむしろ3つすべての組み合わせが好きです。

  1. シンプルという利点があります - 利用可能なセッションがあればデータベースに行く必要はありません。
  2. JSON は軽量で、ブラウザの言語です。
  3. アイテムをデータベースに保存し、セッション ID を使用してそれらを取得すると、ユーザーがセッションを開始し、不完全な状態のままにし、後で戻って中断したところから再開することができます。メモリ要件が大きくて扱いにくくなった場合、データベースは情報を格納するための良い方法かもしれません。

排他的な選択である必要はないと思います。

于 2010-12-06T03:01:11.257 に答える
0

ここHttpSessionListenerでは不要です。サーブレットで基本的に行う必要があるのは、次のとおりです。

List<String> links = (List<String>) request.getSession().getAttribute("links");
if (links == null) {
    links = new ArrayList<String>();
    request.getSession().setAttribute("links", links);
}
links.add(request.getParameter("link"));

セッションが破棄されると、とにかく属性がガベージされます。

JSON は不必要なオーバーヘッドを追加するだけであり、データベースは Web サーバーに十分なメモリ スペースがない場合にのみ有益です (ただし、DB もある程度メモリを消費します)。

PHPから同じサーブレットセッションを維持する方法を考えているだけです。これには、URL の JSESSIONID 属性を使用してサーブレットを呼び出すか (悪い考え)、プロキシとして機能する curl を使用して PHP スクリプトを呼び出す必要があります (PHP ですべてを実行しないのはなぜですか?)。それとも同じドメインで実行されていますか? または、Quercus を使用して Java サーブレット コンテナで PHP を実行していますか?

于 2010-12-06T03:09:35.873 に答える