【发布时间】:2012-03-05 07:46:19
【问题描述】:
Joomla 1.5.25 刚刚从 1.5.23 升级,在保存到会话和持久性方面存在问题,在 1.5.23 上完美运行,但是使用 JSession->set 时会话数据没有保存到数据库中
在 joomla 之上编写自定义应用程序,管理从旧系统导入的用户不能为此使用 joomla 用户(或者至少我没有而且我没有时间),登录工作如下:
- 用户发布电子邮件通行证
- 应用检查用户是否存在
- 如果用户存在,我将用户对象保存到会话中
- 将用户重定向到资源
这里是保存用户到会话的 sn-p
$session = JFactory::getSession();
$session->set('appUserData', array(
'data' => $USER_OBJECT,
'timestamp' => time(),
'role' => 0,
'permits' => $permits
);, "custom_namespace");
现在,由于我在 joomla 范围之外执行此操作,所以我必须加强
define( '_JEXEC', 1 );
define( 'DS', DIRECTORY_SEPARATOR );
define('JPATH_BASE', dirname(dirname(__FILE__)));
require_once (JPATH_BASE . DS . 'includes' . DS . 'defines.php');
require_once (JPATH_BASE . DS . 'includes' . DS . 'framework.php');
一旦我做 $session->set() 如果我在同一个脚本上尝试 $session->get() 它确实会提取我刚刚保存的全部资源,但是如果我尝试从另一个脚本中提取 $session 我一无所获,这是另一个脚本
<?php
error_reporting(E_ALL);
define( '_JEXEC', 1 );
define( 'DS', DIRECTORY_SEPARATOR );
define('JPATH_BASE', dirname(dirname(__FILE__)));
require_once (JPATH_BASE . DS . 'includes' . DS . 'defines.php');
require_once (JPATH_BASE . DS . 'includes' . DS . 'framework.php');
$mainframe = JFactory::getApplication('site');
$session = JFactory::getSession();
echo "<pre>";
print_r($_COOKIE);
print_r($session);
print_r($_SESSION);
echo "</pre>";
exit;
这里我只得到我的cookies数组和带有默认会话信息的会话数组:
Array
(
[__default] => Array
(
[session.counter] => 3
[session.timer.start] => 1329168055
[session.timer.last] => 1329168057
[session.timer.now] => 1329168062
[session.client.browser] => Mozilla/5.0 (Macintosh; Intel Mac OS X 10.7; rv:10.0.1) Gecko/20100101 Firefox/10.0.1 FirePHP/0.7.0
)
)
数据库永远不会用我新创建的会话变量的内容进行更新,我尝试在写入数据库的写入数据库会话适配器上执行一些错误日志,我认为问题出在 (libraries/joomla/session /storage/database.php ) 第 82 行:
$session = &JTable::getInstance('session');
if ($session->load($id) == true) { /*...*/} // never entering here
else { /*...*/ } // always here
我尝试将 $id 的内容输出到日志中,它确实引用了 db 上的有效主键 id
error_log('SELECT * FROM jos_session WHERE session_id = "' . $id . '"');
返回类似 SELECT * FROM jos_session WHERE session_id = "38e6468f35f1994425de3919fa767a3d",我可以确认返回有效记录,我尝试从 1.5.23 中提取旧源,但即使这样也不会它再次起作用,有什么想法可能会升级并使其失败?
**更新**
我也尝试过截断表,实际上我认为更具体的问题是会话在写入数据库时失败,因为我有多个连接到正在使用的 mysql,会话的 JSession 数据库 Mysql 存储引擎感到困惑,更奇怪的是,在纯 1.5.23 的环境中不会发生这种混乱,为每个不同的连接创建资源,我经历了从 1.5.23 到 1.5.25 的更改,但我找不到任何东西与数据库资源管理或对 DBO 对象的任何松散引用有关,我想我需要分析每个连接并检查问题出在哪里,数据位于同一 mysql 服务器上但位于不同的数据库上
【问题讨论】:
标签: php mysql session joomla joomla1.5