1

Joomlaを既存のWebサイトに組み込んで、プレミアムコンテンツに使用できるようにしようとしています。

独自のセッション変数を設定するカスタムビルドの認証システムをすでに持っています。

何らかの理由で、Joomla(別のディレクトリにあります)は、session_start()を追加する場合でも、これらのセッション変数を認識したくありません。すべてのJoomlaページの上部にある行。

Joomlaにカスタムセッション変数を認識させて、Joomlaにあるコンテンツをプレミアムユーザーのみに制限する方法はありますか?

ありがとうございました。

4

7 に答える 7

4

Joomla は独自のセッション管理を使用するため、php セッションを使用すると、動作が保証されません。これを回避するには、juse joomla セッション管理を試してみてください。

これで問題が解決する場合があります。

于 2009-11-25T03:21:29.163 に答える
3

これは古い質問であることは知っていますが、誰かがまだ探している場合に備えて、ここに解決策を投稿することにしました。

Joomla は独自のフレームワークとセッション管理を使用します。独自の php ファイルを作成して、Joomla セッション変数にアクセスすることは引き続き可能です。joomla フレームワークを php スクリプトにロードするだけです。

J1.6 の場合、php スクリプトの先頭に次の行を含める必要があります。注: joomla が session_start() を呼び出すため、これらを一番上に含める必要があります。

define( '_JEXEC', 1 );
define( 'JPATH_BASE', realpath(dirname(__FILE__).'/..' )); //you will need to update this path to represent your installation. This path works if you store all your custom php scripts in a subdirectory off the main joomla install directory.

define( 'DS', DIRECTORY_SEPARATOR );

require_once ( JPATH_BASE .DS.'includes'.DS.'defines.php' );
require_once ( JPATH_BASE .DS.'includes'.DS.'framework.php' );
$mainframe = JFactory::getApplication('site');
$mainframe->initialise();

これを行うと、次を使用してセッション変数を保存できます。

$session->set('msgjson',$msgjson);

以下を使用してセッション変数を読み取ります。

$msgjson = $session->get('msgjson')

以下を使用してセッション変数の設定を解除します。

$session->clear('msgjson');

これは J1.6 で機能します。おそらく、他のバージョンの joomla フレームワークをロードする行を変更する必要があります。フレームワークをロードする必要があるため、Joomla のルート ディレクトリにある index.php から始めます。

これが役立つことを願っています。

于 2011-09-05T02:54:04.767 に答える
1

Joomlaは、ユーザーが「プレミアム」セッションを取得するかどうかを決定する、話している他のシステムとは別に、独自のセッション(セッション「B」と呼びます)を初期化する可能性があります(このセッションを「A」と呼びます) )。セッション「B」が開始されると、セッション「B」がセッション「A」の情報にアクセスすることは不可能になると思います。

これを回避するための私の提案は、純粋な PHP でセッション処理コードを記述し、Joomla が独自のセッションをロードする前にそのコードを実行することです。そうすれば、session_start() を実行すると、セッション「A」がキャッチされます。

これを Joomla に取り込む良い方法は、「システム」プラグインを作成し、関数「onAfterInitialise」を呼び出すことです。この関数は、Joomla がセッションをセットアップする前に呼び出されます (少なくとも、私はそれについてかなり確信しています..笑) .

<?php
// no direct access
defined( '_JEXEC' ) or die( 'Restricted access' );

jimport( 'joomla.plugin.plugin' );

class  plgSystemPremium extends JPlugin
{
    function onAfterInitialise() {
        // ... load session
        // if premium user, return
        // else, redirect user to a registration page or whatever
    }
}
?>
于 2009-11-05T23:48:24.590 に答える
0

phpsessions は joomla で動作しないと言っている人をよく見かけます。セッション管理のための joomla フレームワークを学ぶ準備ができていませんでした。そのための時間がなかったので、いくつかのテストを行ったところ、 Web サイトのインデックス ページではなく、テンプレートのメイン ページで php セッションを開始すると、問題なく動作します。テンプレート ページのトップ ページに次のコード行を追加するだけです。

<?php
// Starting the phpsession
session_start();    
?>
于 2013-05-15T14:01:55.910 に答える
0

認証システムが Cookie を使用し、ブラウザがセッション ID Cookie を joomla スクリプトに送り返すのを防ぐCookie パスを設定している可能性があります。
Cookie パスは、おそらくsession_set_cookie_params()またはini_set( ) を介して設定されます。

于 2009-07-01T00:35:50.603 に答える
0

Joomla 1.5 はJSessionクラスを使用します。

Joomla のすべてが独自の内部フレームワークによって強化されているため、Joomla が独自の内部セッション管理コードを初期化するときに古いセッション変数を上書きする可能性があるため、セッションなどのために純粋な PHP を作成することはお勧めしません。

于 2009-07-04T22:34:11.743 に答える
0

私は、任意のファイルにリンクし、セッション データを維持jumiする優れた無料コンポーネントである を使用しました。joomla

きれいなページが必要な場合ob_end_clean();は、新しいファイルの先頭とdie;最後に使用して joomla テンプレートをクリアします。

于 2011-02-21T17:13:39.883 に答える