2

Joomla の使用中にセッション/Cookie に問題が発生しました! バージョン: Joomla! 1.5.9 本番/安定版 [Vatani] 2009 年 1 月 9 日 23:00 GMT。

データをセッションに保存し、次のページでアクセスしようとしています。試してみました:

1) joomlas セッションの使用 ($session->set('var', 'data')) - これは私の推奨方法です

2) 通常の PHP セッションの使用 ($_SESSION['Var'] = 'data') - joomla メインフレームを初期化するまで、これは正常に動作します

3) PHP Cookie の使用 (setcookie('var', 'data', time()+3600,'/');) - これも joomla を初期化するまで機能します。

これが私が使用しようとしているコードです:

ページ1:

define( '_JEXEC', 1 );
define( 'JPATH_BASE', realpath(dirname(__FILE__).'/../../..' ));
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 = JFactory::getSession();

$thedata = array();
$i = 0;
if($resultscount > 0) // $resultscount = mysql_num_rows($sql) == 1097 in my script
{
      while($row = mysql_fetch_assoc($result))
                $thedata[$i]['id'] = $row['user_id'];
                ...LOTS more additions to $thedata, 1000+ rows containing 28 variables each.
$i++;
}
$session->set('thedata',$thedata);

ページ2:

define( '_JEXEC', 1 );
define( 'JPATH_BASE', realpath(dirname(__FILE__).'/../../..' ));
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 = JFactory::getSession();
print_r($session->get('thedata'));

セッションは常に空です。セッションに少量のデータ (1 行または 2 行) しか含まれていない場合は機能しますが、多数の結果をセッションに保存しようとすると、セッションが中断され、次のページでセッションが空になります。

Cookie でも同じことが起こります。結果が少ない = 正常に動作し、結果が多い = Cookie が空です。

私は何を間違っていますか?

4

1 に答える 1

0

ほとんどの場合、セッションで 30000 を超える変数を 2 次元配列に格納すると、オーバーフローが発生してデータが破損し、データが失われます。セッション ストレージ (スペースが限られている) でデータベースを複製しても、何も得られません。

データを再クエリする方が適切です。また、Joomla! を使用してください。mysql 関数を直接使用する代わりに API を使用します。

$db = JFactory::getDBO();
$db->setQuery("SELECT ...");
$thedata = $db->loadObjectList('id');

必要なのはそれだけです(との二重索引付け$iは何の目的もありません)。

于 2013-06-01T21:11:39.100 に答える