2009-06-30 14 views
1

Ich habe versucht, Joomla in meine bestehende Website zu bauen, damit ich es für Premium-Inhalte verwenden kann.Benutzerdefinierte Sitzungen mit Joomla

Ich habe bereits ein benutzerdefiniertes Authentifizierungssystem, das meine eigenen Sitzungsvariablen setzt.

Aus irgendeinem Grund möchte Joomla (das sich in einem anderen Verzeichnis befindet) diese Sitzungsvariablen nicht erkennen, selbst wenn session_start() hinzugefügt wird; Zeile an der Spitze aller Joomla-Seiten.

Gibt es eine Idee, wie ich Joomla dazu bringen kann, meine benutzerdefinierten Sitzungsvariablen zu erkennen, damit ich den Inhalt von Joomla auf Premium-Benutzer beschränken kann?

Vielen Dank.

Antwort

0

Möglicherweise verwendet Ihr Authentifizierungssystem Cookies und setzt eine cookie path, die verhindert, dass der Browser das Session-ID-Cookie zurück an das Joomla-Skript sendet.
Der Cookie-Pfad wird wahrscheinlich über session_set_cookie_params() oder ini_set() festgelegt.

0

Joomla 1.5 verwendet eine Klasse JSession.

Da alles in Joomla von einem eigenen internen Framework betrieben wird, würde ich nicht empfehlen, reines PHP für so etwas wie Sessions zu schreiben, da es wahrscheinlich ist, dass Joomla alte Session-Variablen überschreibt, wenn es seinen eigenen internen Session-Management-Code initialisiert.

1

Joomla wird höchstwahrscheinlich seine eigene Sitzung initialisieren (wir nennen es Sitzung "B") getrennt von dem anderen System, über das Sie sprechen, wenn der Benutzer die "Premium" -Sitzung erhält (wir nennen dies) Sitzung "A"). Sobald die Sitzung "B" startet, glaube ich nicht, dass es möglich ist, dass Sitzung "B" auf Informationen in Sitzung "A" zugreifen kann.

Mein Vorschlag, um das zu umgehen, wäre, den Session-Handling-Code in reinem PHP zu schreiben und diesen Code auszuführen, bevor Joomla seine eigene Session lädt. Auf diese Weise sollte beim Start von session_start() die Sitzung "A" abgefangen werden.

Ein guter Weg, dies in Joomla zu bekommen wäre ein "System" -Plugin zu schreiben und die Funktion "onAfterInitialise" aufzurufen. Diese Funktion wird aufgerufen, bevor Joomla seine Sitzung eingerichtet hat (zumindest bin ich ziemlich sicher) .. haha).

4

Joomla verwendet ihre eigenen Session-Management, so dass wenn Sie PHP-Sitzung verwenden wird es nicht funktionieren Garantie. Um dies zu umgehen, versuchen Sie einfach Joomla Session Management zu rechtfertigen.

This may solve you problem.

0

I verwendet jumi, eine große kostenlose Komponente für joomla, die zu jeder Datei verknüpft und Sitzungsdaten verwaltet.

Wenn Sie eine saubere Seite benötigen, verwenden ob_end_clean(); an der Spitze der neuen Datei und die; am Ende der Joomla Template zu löschen.

3

Ich weiß, das ist eine alte Frage, aber ich habe beschlossen, hier eine Lösung zu posten, falls jemand noch danach sucht.

Joomla verwendet ein eigenes Framework und Session Management. Sie können weiterhin Ihre eigenen PHP-Dateien schreiben und auf Joomla-Sitzungsvariablen zugreifen. Sie müssen nur das Joomla-Framework in Ihr PHP-Skript laden.

Für J1.6 müssen Sie die folgenden Zeilen am Anfang Ihres PHP-Skripts einfügen. HINWEIS: Diese müssen ganz oben eingefügt werden, da joomla einen session_start() aufrufen wird.

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(); 

Sobald Sie tun, dass Sie Session-Variablen speichern können mit:

$session->set('msgjson',$msgjson); 

Lesesitzungsvariablen:

$msgjson = $session->get('msgjson') 

und ungesetzt Sitzungsvariablen:

$session->clear('msgjson'); 

Dies funktioniert für J 1.6. Sie werden wahrscheinlich die Zeilen ändern müssen, die das Joomla-Framework für andere Versionen laden. Ich würde mit der index.php im Joomla-Wurzelverzeichnis beginnen, da das Framework geladen werden muss.

Ich hoffe, das hilft.

0

Ich sehe immer wieder, dass Leute sagen, dass phphessions in Joomla nicht funktionieren wird und ich nicht bereit war, das Joomla-Framework für ihre Sitzungsverwaltung zu lernen, ich hatte keine Zeit dafür, also habe ich ein paar Tests gemacht und gefunden Wenn Sie die PHP-Sitzung nur auf der Hauptseite Ihrer Vorlage und nicht auf der Indexseite Ihrer Website starten, funktioniert das problemlos. Legen Sie diese Codezeile einfach auf die oberste Seite Ihrer Vorlagenseite:

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