Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/joomla/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/joomla/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 与Joomla的自定义会话_Php_Joomla_Session - Fatal编程技术网

Php 与Joomla的自定义会话

Php 与Joomla的自定义会话,php,joomla,session,Php,Joomla,Session,我正在尝试将Joomla构建到我现有的网站中,这样我就可以将其用于高级内容 我已经有了一个定制的身份验证系统,可以设置我自己的会话变量 出于某种原因,位于不同目录中的Joomla不想识别这些会话变量,即使在添加会话_start;所有Joomla页面顶部的行 你知道如何让Joomla识别我的自定义会话变量,从而将Joomla中的内容仅限于高级用户吗 谢谢。也许您的身份验证系统使用cookie并设置一个阻止浏览器将会话id cookie发送回joomla脚本的密码。 cookie路径可能通过或设置。

我正在尝试将Joomla构建到我现有的网站中,这样我就可以将其用于高级内容

我已经有了一个定制的身份验证系统,可以设置我自己的会话变量

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

你知道如何让Joomla识别我的自定义会话变量,从而将Joomla中的内容仅限于高级用户吗


谢谢。

也许您的身份验证系统使用cookie并设置一个阻止浏览器将会话id cookie发送回joomla脚本的密码。
cookie路径可能通过或设置。

可能您的身份验证系统使用cookie并设置一个阻止浏览器将会话id cookie发送回joomla脚本的路径。 cookie路径可能通过或设置。

Joomla 1.5使用类

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

Joomla 1.5使用类


由于Joomla中的一切都是由它自己的内部框架驱动的,所以我不建议为会话之类的东西编写纯PHP,因为Joomla很可能会在初始化自己的内部会话管理代码时覆盖旧会话变量。

Joomla很可能会初始化自己的会话,我们将其称为会话B,与您正在讨论的另一个系统分开,该系统决定用户是否获得高级会话,我们将此会话称为会话A。一次会话B开始,我认为会话B不可能访问会话A中的信息

我的建议是用纯PHP编写会话处理代码,并在Joomla加载自己的会话之前运行该代码。这样,当您运行session\u start时,它应该捕获session A

一个很好的方法是编写一个系统插件,并在初始化这个函数后调用函数,在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
    }
}
?>

Joomla很可能会初始化它自己的会话,我们将其称为会话B,与您正在讨论的另一个系统分开,该系统决定用户是否获得高级会话,我们将其称为会话A。一旦会话B启动,我认为会话B将无法访问会话A中的信息

我的建议是用纯PHP编写会话处理代码,并在Joomla加载自己的会话之前运行该代码。这样,当您运行session\u start时,它应该捕获session A

一个很好的方法是编写一个系统插件,并在初始化这个函数后调用函数,在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
    }
}
?>

Joomla使用自己的会话管理,所以当您使用php会话时,它不能保证正常工作。要解决这个问题,请尝试使用joomla会话管理


Joomla使用自己的会话管理,因此当您使用php会话时,它不能保证正常工作。要解决这个问题,请尝试使用joomla会话管理

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

如果你需要一个干净的页面,使用ob_end_clean;在新文件和模具的顶部;最后,我清除了joomla模板。

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


如果你需要一个干净的页面,使用ob_end_clean;在新文件和模具的顶部;最后,我将清除joomla模板。

我知道这是一个老问题,但我决定在这里发布一个解决方案,以防有人仍在寻找它

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');
使用以下命令读取会话变量:

$session->set('msgjson',$msgjson);
$msgjson = $session->get('msgjson')
$session->clear('msgjson');
并使用以下命令取消设置会话变量:

$session->set('msgjson',$msgjson);
$msgjson = $session->get('msgjson')
$session->clear('msgjson');
这适用于J1.6。您可能需要为其他版本更改加载joomla框架的行。我将从Joomla根目录中的index.php开始,因为它必须加载框架


我希望这能有所帮助。

我知道这是一个老问题,但我决定在这里发布一个解决方案,以防有人还在寻找它

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');
使用以下命令读取会话变量:

$session->set('msgjson',$msgjson);
$msgjson = $session->get('msgjson')
$session->clear('msgjson');
并使用以下命令取消设置会话变量:

$session->set('msgjson',$msgjson);
$msgjson = $session->get('msgjson')
$session->clear('msgjson');
这适用于J1.6。您可能需要为其他版本更改加载joomla框架的行。我将从Joomla根目录中的index.php开始,因为它必须加载框架


我希望这能有所帮助。

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

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

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

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