1

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

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

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

知道如何让 Joomla 识别我的自定义会话变量,以便我可以将位于 Joomla 中的内容限制为仅限高级用户吗?

谢谢你。

4

7 回答 7

4

Joomla 使用自己的会话管理,因此当您使用 php 会话时,它不会保证工作。要解决这个问题,只需尝试使用 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 框架来进行会话管理,我没有时间去做,所以我做了一些测试,我发现如果你只是在模板的主页而不是在您的网站索引页面上启动 php 会话,它将正常工作。只需将这行代码放在模板页面的首页即可:

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

Joomla 1.5 使用JSession类。

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

于 2009-07-04T22:34:11.743 回答
0

也许您的身份验证系统使用 cookie 并设置了一个cookie 路径,以防止浏览器将 session-id cookie 发送回 joomla 脚本。
cookie 路径可能通过session_set_cookie_params()ini_set()设置。

于 2009-07-01T00:35:50.603 回答
0

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

如果您需要一个干净的页面,ob_end_clean();请在新文件的顶部和die;末尾使用以清除 joomla 模板。

于 2011-02-21T17:13:39.883 回答