web-dev-qa-db-ja.com

デフォルトのPHPセッションを上書きする

バックグラウンドでjoomlaを使用して AngularJs アプリを構築しています。 AngularJsアプリは一度読み込まれると、常にajaxを介してサーバーを呼び出します。一部の呼び出しは同時に発生します。これらの呼び出しでデフォルトのPHPセッションを使用している場合、phpは一度に1つの呼び出しを処理します。そのため、一度に複数の呼び出しを許可する独自のセッションハンドラーを記述しました。デフォルトのphpセッションの代わりにそれを使用したいのですが、Joomlaでこれを行う簡単な方法はありますか、または私は自分のJSessionクラスを書かなければならないでしょうか?

編集

_<?php
    session_start();
    sleep(10);
    echo "Hello";
?>
_

このファイルを同じブラウザで同時に2回呼び出すと、最初の呼び出しは10秒で戻り、2番目の呼び出しは20秒で戻ります。 JSessionクラスはsession_start()を呼び出すので、joomlaは同じ動作をします。

編集

データベースオプションを使用するか、独自のセッションハンドラーでJSessionStorageを拡張すると、joomlaはsession_set_save_handler()を使用し、セッションをロックするデフォルトの動作を変更します。したがって、session_startを呼び出すにはセッションをロックする必要があると言ったとき、私は間違っていました。

3
csbenjamin

独自のJSessionクラスを作成する必要はありませんが、JSessionStorageを拡張するクラスを作成して、Joomlaのセッション処理と統合する必要があります。

ほとんどの場合、グローバル構成を介してセッションハンドラーを設定しようとすると、問題が発生します。ハンドラを含むバージョンでJFormFieldSessionHandlerをオーバーライドするか、configuration.phpで手動で指定するだけです。ただし、後者のオプションは、将来グローバル構成を使用しようとしたときに問題が発生する可能性があることを意味します。

3
Rouven Weßling

編集:それは答えが正しくないことを縫い合わせています。

デフォルトのJoomlaセッションハンドラー(データベース)は、処理中にセッションをロックしません。したがって、ロックについて心配する必要はありません。

とにかく、最初のリクエストのセッションデータを2番目のリクエストのデータで上書きすることは可能です。

4
Harald Leithner

非同期呼び出しの世界へようこそ。私のアドバイスは、AJAX/RESTful呼び出しにセッションを使用しないことです。私がやろうとしていることのほとんどは、ある種の認証トークンを持っているので、誰が電話をかけているかがわかります。

3
Andrew Eddie

Joomlaを使用すると、問題を解決できる新しいセッションストレージバックエンドを作成できます。 JSessionStorageをカスタムセッションクラスで拡張するだけで、configuration.phpファイルにハンドラーを直接設定できます。 (カスタムセッションストレージバックエンドはグローバル管理設定に表示されません。)

2
Don Gilbert