当我包含Joomla框架时,Joomla会话似乎覆盖了我在另一个脚本中使用的会话。 如何从第一个会话和Joomla获取信息?
详情
我在Joomla外部的PHP脚本中开始了一个会话。
该文件是file1.php
<?php
session_start();
$qid[0]=1;
$qid[0]=2;
$qid[0]=3;
$_SESSION['qid']=$qid;
?>
然后我有一个名为main.php的php脚本它包含2个文件,getsessdata.php和getjoomla.php
main.php
<?php
include("getsessdata.php");
include("getjoomla.php");
?>
如果没有包含getjoomla.php,我可以从main.php获取会话数据。
的var_dump($ _ SESSION);显示包含getjoomla.php时缺少qid的会话数据。
getsessdata.php
<?php
session_start();
$qid=$_SESSION['qid'];
?>
getjoomla.php
<?php
define( '_JEXEC', 1 );
define('JPATH_BASE', dirname(__FILE__));
define( 'DS', DIRECTORY_SEPARATOR );
require_once ( JPATH_BASE .DS.'includes'.DS.'defines.php' );
require_once ( JPATH_BASE .DS.'includes'.DS.'framework.php' );
require_once (JPATH_BASE.DS.'libraries'.DS.'joomla'.DS.'environment'.DS.'request.php');
$mainframe =& JFactory::getApplication('site');
$mainframe->initialise();
?>
问题:
如何从file1.php访问会话信息并仍然从getjoomla.php访问数据?为什么我会丢失第一次会议的信息?
不确定这是否有帮助,但是一旦我从main.php中的file1获得会话数据,就不再需要会话了。
答案 0 :(得分:1)
继续使用$ mainframe,我猜Joomla! 1.5.x的。
当你在它的构造中调用JFactory :: getApplication('site')时,会使用带有传入ID的session_start()创建一个新会话,这会打乱以前的任何会话。
更具体地说,当JSession被调用时,它的__construct调用 _start
function _start()
{
// start session if not startet
if( $this->_state == 'restart' ) {
session_id( $this->_createId() );
}
session_cache_limiter('none');
session_start();
// Send modified header for IE 6.0 Security Policy
header('P3P: CP="NOI ADM DEV PSAi COM NAV OUR OTRo STP IND DEM"');
return true;
}
要解决这个问题,你可以试试*:
将您的数据放入$ _SESSION
在'site'值之后传递一个选项数组,例如。你的会话命名空间。
- &GT;
$options['name'] = 'qidSpace';
$mainframe =& JFactory::getApplication('site', $options);
HTH。
*我不是100%确定机制,但它应该很接近。
答案 1 :(得分:0)
最后,我使用Joomla会话来存储信息。
//Store values in Joomla Session
$session = JFactory::getSession();
$session->set('variable', $variable);
//Get values from Joomla session later
$variable = $session->get('variable');
答案 2 :(得分:0)
为避免冲突,如果至少不需要,您也可以跳过大型机部分。
例如:
<?php
define( '_JEXEC', 1 );
define('JPATH_BASE', 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();
jimport('joomla.user.helper');
JUserHelper::verifyPassword($pass1,$pass2);
?>
花了一些时间才弄清楚它的确有效!