2009-07-24 12 views
13

के बाहर सत्र डेटा तक पहुंचने के लिए मैं जूमला (प्लगइन के रूप में नहीं) के बाहर एक एप्लिकेशन चलाने की कोशिश कर रहा हूं और मैं लॉग इन उपयोगकर्ता की जानकारी (उपयोगकर्ता आईडी) तक पहुंच बनाना चाहता हूं। मैं सोच रहा हूं कि मुझे ऐसा करने के लिए कैसे जाना चाहिए? क्या कोई फाइल है जिसमें मैं शामिल कर सकता हूं? मैंने $ _SESSION का उपयोग करने की कोशिश की लेकिन यह खाली दिखाता है।जूमला

क्या मेरी समस्या का कोई आसान समाधान है? आपके समय के लिए शुक्रिया।

उत्तर

19

दरअसल यह उतना आसान नहीं है जितना लगता है। जूमला अद्वितीय सत्र-आईडी-पीढ़ी और कुछ एन्क्रिप्शन के साथ अपने स्वयं के सत्र हैंडलिंग का उपयोग करता है, इसलिए जूमला सत्र डेटा में प्रवेश करने का एकमात्र तरीका उचित जूमला फ़ंक्शंस का उपयोग करना है (जैसा कि अन्य ने सुझाव दिया है)। मैंने हाल ही में एक प्रोजेक्ट किया था जहां हमें एक जूमला प्रमाणीकृत उपयोगकर्ता को एक अलग एप्लिकेशन में स्थानांतरित करने की आवश्यकता थी। हमने जूमला एडेप्टर जोड़कर ऐसा किया जो जूमला उपयोगकर्ता कक्षाओं को तुरंत चालू करता है, उपयोगकर्ता डेटा पढ़ता है, सबकुछ एन्क्रिप्टेड कुकी में डालता है और हमारे एप्लिकेशन पर रीडायरेक्ट करता है। वहां हम एन्क्रिप्टेड कुकी पढ़ते हैं, अपनी खुद की उपयोगकर्ता ऑब्जेक्ट को तुरंत चालू करते हैं और कुकी को त्याग देते हैं। चूंकि यह 100% सुरक्षित नहीं है, हम डेटाबेस तालिका में उपयोगकर्ता डेटा लिखने के लिए सिस्टम को बदल रहे हैं और इसे हमारे एप्लिकेशन से पढ़ते हैं - हम एक कुकी के माध्यम से असुरक्षित तरीके से बचते हैं, क्योंकि कुकी को एन्क्रिप्ट किया गया है (और इसमें शामिल है संवेदनशील उपयोगकर्ता जानकारी जो किसी उपयोगकर्ता को प्रमाणीकृत करने के लिए पर्याप्त है) इसे तार पर स्थानांतरित किया जाएगा और उसे स्नीफ किया जा सकता है।

define('_JEXEC', 1); 
define('JPATH_BASE', dirname(dirname(__FILE__))); 
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'); 

ऊपर जूमला संसाधनों तक पहुंचने के लिए आवश्यक मूल स्क्रिप्ट है।

+0

मैं इस तरह की कार्यक्षमता केकपीएचपी में खींचना चाहता हूं। केक-आधारित साइट सबडोमेन पर होस्ट की जाती है। क्या आपको लगता है कि आपकी सलाह मेरी समस्या पर लागू होगी? – the0ther

+0

मुझे केकेपीएचपी और इसकी प्रमाणीकरण तंत्र नहीं पता है, लेकिन मुझे लगता है कि यह दृष्टिकोण सामान्य रूप से काम कर सकता है - जब तक आप आवेदन 1 से आवेदन 2 तक पहचानकर्ता (मेरे मामले में एक कुकी) स्थानांतरित करने में सक्षम होते हैं 2. सबडोमेन को देखते हुए इसे चाहिए एक कुकी रखने में कोई समस्या नहीं है जिसे सबडोमेन के साथ-साथ मुख्य डोमेन से भी पढ़ा जा सकता है। –

+0

नोब सवाल के लिए खेद है, लेकिन मुझे लगता है कि हम इसे मूल जूमला निर्देशिका में, PHP स्क्रिप्ट में डालते हैं? – Jaryl

4

समाधान आपके पूरे डोमेन और/या साइट के लिए सत्र सेट करना है। यह लागू होता है यदि आप जूमला स्कोप के बाहर सत्र डेटा तक पहुंचने का प्रयास कर रहे हैं। उदाहरण के लिए, यदि आपकी जूमला साइट http://example.com/joomla/ पर और आपकी दूसरी साइट http://othersite.example.com/ पर स्थित है तो सत्र आईडी धारण करने वाली कुकी जूमला से दूसरी साइट पर प्रेषित नहीं होती है। इस व्यवहार को संशोधित करने के लिए, प्रत्येक session_start() से पहले सत्र_ set_ cookie_ पैराम्स का उपयोग करें (मुझे जूमला बहुत अच्छी तरह से नहीं पता है, लेकिन आपको कोड की केवल कुछ पंक्तियां जोड़नी होंगी)। इसे इस तरह का उपयोग करें:

session_set_cookie_params(86400, '/', '.example.com'); 

86400 सत्र के जीवनकाल है, तो आप क्या पसंद करते हैं (86400 एक दिन है) पर सेट करें। '/' कुकी का मार्ग है। इसका मतलब है कि यदि आपकी जूमला साइट http://example.com/joomla/ पर स्थित है, तो उपयोगकर्ता कुकी http://example.com/ तक पहुंचने पर भी भेजा जाएगा।

'.example.com' डोमेन है। शुरुआत में बिंदु पर ध्यान दें, यह बहुत महत्वपूर्ण है। यह कहता है कि सत्र कुकी example.com के किसी भी सबडोमेन पर भेजी जाएगी। यदि आप इसे नहीं डालते हैं, तो कुकी केवल http://example.com/ से शुरू होने वाले पते के लिए भेजी जाएगी।

यह आपकी समस्या का समाधान करना चाहिए, जब तक कि आप किसी अन्य डोमेन से सत्र डेटा तक पहुंचने का प्रयास नहीं कर लेते। यदि ऐसा है, तो यहां एक टिप्पणी छोड़ दो, मैं देखूंगा कि मुझे कैंडी कुछ मिलती है या नहीं।

0

यह बहुत संभव है कि वर्डप्रेस की तरह, जूमला किसी भी 'सत्र' डेटा का उपयोग नहीं करता है, बल्कि डाटाबेस से सीधे डेटा खींचता है। इस मामले में आपको जूमला के मूल कार्यों का उपयोग करने की आवश्यकता होगी।

लेकिन यह सिर्फ वर्डप्रेस के साथ मेरे अनुभव से है।

अपडेट किया गया

मुझे लगता है कि मैं गलत था।

//, वैश्विक JSession वस्तु के लिए संदर्भ लौटाता केवल इसे बनाने यदि यह पहले से ही $ सत्र = & JFactory मौजूद नहीं है:
Supposidly इस जूमला सत्र चर तक पहुँचने के लिए एपीआई वर्ग है: : getSession();

// सत्र से मूल्य प्राप्त करें var $ value = $ session-> प्राप्त करें ('var_name', शून्य);

// सत्र में एक मान var $ सत्र-> सेट ('var_name', $ मान);

$user =& JFactory::getUser();
$user->get('id');

आप उपयोगकर्ता आईडी प्राप्त करने देगा:

1

प्रयोक्ता आईडी आप Joomlas कार्यों का उपयोग करने की जरूरत है पाने के लिए। हालांकि आपको जूमला पेज के अंदर ऐसा करने की आवश्यकता होगी, इसलिए मुझे नहीं पता कि usefult टोपी आपके लिए कैसे होगी।

+0

काम नहीं करेगा यह मैं क्या किया है मत भूलना। मैं काम नहीं कर सका कि जूमला कार्यों तक पहुंचने के लिए मुझे जो न्यूनतम वातावरण स्थापित करने की आवश्यकता है, इसलिए मैंने बुलेट को थोड़ा सा किया और घटकों को लिखना सीख लिया। वे थोड़ा अजीब हैं, लेकिन जब आप इसे लटकाते हैं तो इतना बुरा नहीं होता है। फिर कम से कम, आप जूमला एपीआई के माध्यम से जो कुछ भी चाहते हैं उसे प्राप्त कर सकते हैं। – nedned

0

यह देखने में मददगार हो सकता है कि जेफ्यूजन जैसे एप्लिकेशन पुलों में कैसा हासिल किया जाता है। मैं जूमला के लिए कम से कम एक सिस्टम प्लगइन का सुझाव देता हूं, जो जूमला इंस्टॉल से आपको जो कुछ भी चाहिए, उसे प्राप्त करने के लिए जूमला फ़ंक्शंस का उपयोग करेगा और एप्लिकेशन पर आपके एप्लिकेशन को शिप करें। सबसे महत्वपूर्ण मुद्दा यूआर डेटा प्रवाह मॉडलिंग होगा!

8
define('_JEXEC', 1); 

define('JPATH_BASE', 'your joomla basedir goes here'); 

define('DS', DIRECTORY_SEPARATOR); 
require_once (JPATH_BASE .DS.'includes'.DS.'defines.php'); 
require_once (JPATH_BASE .DS.'includes'.DS.'framework.php'); 

JDEBUG ? $_PROFILER->mark('afterLoad') : null; 
$mainframe =& JFactory::getApplication('site'); 
$mainframe->initialise(); 
JPluginHelper::importPlugin('system'); 
JDEBUG ? $_PROFILER->mark('afterInitialise') : null; 
$mainframe->triggerEvent('onAfterInitialise'); 

$user =& JFactory::getUser(); 

    if ($user->guest) { 
     echo 'stuff'; 
      //redirect('/'); 
    } else { 
     echo 'user'; 
    } 
0

जूमला उपयोगकर्ता आईडी का उपयोग पाने के लिए:

$session = & JFactory::getSession(); 
$session_id = $session->getId(); 
2

समाधान स्टीफन Gehrig

define('_JEXEC', 1); 
define('JPATH_BASE', dirname(dirname(__FILE__))); 
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'); 
से पता चला है:

$user =& JFactory::getUser(); 
$user_id = $user->get('id'); 

और उपयोगकर्ता सत्र id उपयोग पाने के लिए

ठीक काम करता है, मैंने जूमला तक पहुंचने की कोशिश कर कई लंबी रात बिताई हैं! जूमला फ़ोल्डर के बाहर संसाधन।

$session  = &JFactory::getSession(); 

अनुवर्ती कोड में, ठीक काम करता है जब getApplication विधि लागू किया गया है।

समाधान के लिए धन्यवाद।

1

में इस पर लागू mod_login.php

के बाद: $user =& JFactory::getUser();

echo "<p>Your usertype is {$user->usertype} which has a group id of {$user->gid}.</p>";

0

मुझे लगता है कि सेब द्वारा ication आप एक और वेबसाइट का मतलब है। आपकी सबसे अच्छी शर्त है कि उस एप्लिकेशन में जूमला स्टार्टअप फ़ाइल को चालू करने के लिए एक आईफ्रेम होना, उस आईफ़्रेम में उपयोगकर्ता आईडी प्राप्त करें, इसे अपने वर्तमान सत्र आईडी के साथ डेटाबेस में कहीं भी स्टोर करें, और उसके बाद इसे अन्य एप्लिकेशन द्वारा पुनर्प्राप्त करें। हालांकि कुछ समय लगेगा।

0

मैंने कोड को जूमला index.php में नीचे रखा है और यह मेरे लिए ठीक काम है।

//Set session to access it outside
$user =& JFactory::getUser();
$username = $user->get('username');

session_start();
$_SESSION['username'] = $username;

अब आप नीचे

session_start();
$_SESSION['username'];

2

सबसे पहले के रूप में जूमला के बाहर सत्र चर का उपयोग कर सकते हैं इस प्रकार कुछ जूमला के स्थिरांक (पहचानकर्ता) को परिभाषा प्रदान करने के लिए है :

define('_JEXEC', 1); 
define('DS', DIRECTORY_SEPARATOR); 
define('JPATH_BASE',$_SERVER['DOCUMENT_ROOT'].DS. basename(dirname(__DIR__))); 

जहां: JPATH_BASE आपकी साइट की रूट निर्देशिका का प्रतिनिधित्व करता है। यह सही होना चाहिए।

से के बाद, आप के रूप में इस महत्वपूर्ण फाइलों को उपयोग करने के लिए:

require_once (JPATH_BASE .DS.'includes'.DS.'defines.php'); 
require_once (JPATH_BASE .DS.'includes'.DS.'framework.php'); 

से के बाद, आप एक आवेदन वस्तु बना सकते हैं और यह भी प्रारंभ करने के लिए है:

$mainframe =& JFactory::getApplication('site'); 
$mainframe->initialise(); 

[यह वैकल्पिक है] यदि आप कुछ अन्य पुस्तकालयों को आयात करना चाहते हैं, तो आप इसे निम्न प्रकार से कर सकते हैं:

jimport('joomla.user.user'); 
jimport('joomla.session.session'); 
jimport('joomla.user.authentication'); 

तो कोर सह अपनी फ़ाइल के लिए डी इस प्रकार है:

define('_JEXEC', 1); 
define('DS', DIRECTORY_SEPARATOR); 
define('JPATH_BASE',$_SERVER['DOCUMENT_ROOT'].DS. basename(dirname(__DIR__))); 

require_once (JPATH_BASE .DS.'includes'.DS.'defines.php'); 
require_once (JPATH_BASE .DS.'includes'.DS.'framework.php'); 

$mainframe =& JFactory::getApplication('site'); 
$mainframe->initialise(); 

//optional use depend on requirement 
jimport('joomla.user.user'); 
jimport('joomla.session.session'); 
jimport('joomla.user.authentication'); 
0

मैं आपको नहीं बता सकते हैं कि कैसे जूमला 1.5 ऊपर संस्करणों के साथ करता है कि लेकिन में Joomla 1.5 यहाँ जाती है कि आप कैसे करना है: (मैं अन्य संस्करणों प्रक्रिया के लिए यकीन है बहुत समान है)

जूमला वेबसाइट और बैक-एंड के सामने के अंत के लिए अद्वितीय सत्र आईडी उत्पन्न करता है। सत्र डेटा तक पहुंचने के लिए आपको केवल सत्र आईडी पता है।

जूमला विन्यास फाइल में नामक पैरामीटर है "गुप्त"

बैक-एंड के लिए यह है कि कैसे आप सत्र id उत्पन्न है:

$session_id = md5(md5(JConfig::$secret.'site')); 
:

$session_id = md5(md5(JConfig::$secret.'administrator')); 

और सामने अंत के लिए

इसके बाद एक साधारण क्वेरी

mysql_query('SELECT `data` FROM jos_session WHERE session_id="'.$sessionId.'" ) 

आपको सत्र डेटा तक पहुंच प्रदान करेगा। आपको केवल session_decode के साथ डिक्रिप्ट करना है और सत्र डेटा $ _SESSION चर में होगा।

session_decode से पहले session_start डाल करने के लिए अन्यथा यह