Joomla的自定义会话

时间:2009-06-30 23:51:21

标签: php joomla session

我正在尝试将Joomla构建到我现有的网站中,以便将其用于优质内容。

我已经有了一个自定义的身份验证系统来设置我自己的会话变量。

出于某种原因,Joomla(位于不同的目录中)不想识别这些会话变量,即使在添加session_start()时也是如此。排在所有Joomla页面的顶部。

我知道如何让Joomla识别我的自定义会话变量,这样我就可以将Joomla中的内容限制为只有高级用户吗?

谢谢。

7 个答案:

答案 0 :(得分:4)

Joomla使用自己的会话管理,所以当你使用php会话时它不会保证。为了解决这个问题,我只想尝试jom joomla会话管理。

This may solve you problem.

答案 1 :(得分: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开始,因为它必须加载框架。

我希望这会有所帮助。

答案 2 :(得分:1)

Joomla很可能将其自己的会话(我们将其称为会话“B”)与您正在讨论的其他系统分开来确定用户是否获得“高级”会话(我们将称之为会话) “一个”)。会话“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
    }
}
?>

答案 3 :(得分:0)

也许您的身份验证系统使用Cookie并设置cookie path,以防止浏览器将会话ID cookie发送回joomla脚本。
Cookie路径可能会通过session_set_cookie_params()ini_set()设置。

答案 4 :(得分:0)

Joomla 1.5使用JSession类。

由于Joomla中的所有内容都由它自己的内部框架提供支持,我不建议为会话之类的东西编写纯PHP,因为Joomla可能会在初始化它自己的内部会话管理代码时覆盖旧的会话变量。

答案 5 :(得分:0)

我使用jumijoomla的一个很棒的免费组件,它链接到任何文件并维护会话数据。

如果您需要干净的页面,请使用新文件顶部的ob_end_clean();和最后的die;清除joomla模板。

答案 6 :(得分:0)

我一直看到有人说phostssions在joomla中不起作用,我还没准备好为他们的会话管理学习joomla框架,我没有时间去做,所以我做了一些测试,我发现如果您只是在模板的主页面而不是在您的网站索引页面上启动php会话,它将正常工作。只需将此行代码放在模板页面的首页:

<?php
// Starting the phpsession
session_start();    
?>