2009-09-17 5 views
5

यह बहुत आसान है। मैंZend_Auth संग्रहण कैसे काम करता है?

$auth->getStorage()->write($user); 

लिखना और फिर मैं चाहता हूँ, एक अलग प्रक्रिया इस $ उपयोगकर्ता को लोड करने में, लेकिन मैं इसलिए नहीं

$user = $auth->getIdentity(); 

खाली है कर सकते हैं। क्या मैं बस नहीं ... इसे सेट करें? यह क्यों काम नहीं करता है? परिचय सहायता?

[संपादित करें 2011-04-13]

यह लगभग दो साल पहले कहा गया है। तथ्य यह है कि, मैंने जुलाई 2010 में सवाल दोहराया और एक शानदार जवाब मिला कि मैं वापस समझ में नहीं आया।

लिंक: Zend_Auth fails to write to storage

मैं के बाद से एक बहुत अच्छा litte वर्ग है कि मैं अपने सभी परियोजनाओं में उपयोग (अतिरिक्त फेरबदल के साथ कभी कभी) Zend_Auth रूप में एक ही भंडारण इंजन का उपयोग कर, लेकिन सभी बुरा circumventing निर्माण किया है।

<?php 

class Qapacity_Helpers_Storage { 

    public function save($name = 'default', $data) { 

     $session = new Zend_Session_Namespace($name); 
     $session->data = $data; 

     return true; 
    } 

    public function load($name = 'default', $part = null) { 

     $session = new Zend_Session_Namespace($name); 

     if (!isset($session->data)) 
      return null; 

     $data = $session->data; 

     if ($part && isset($data[$part])) 
      return $data[$part]; 

     return $data; 
    } 

    public function clear($name = 'default') { 

     $session = new Zend_Session_Namespace($name); 

     if (isset($session->data)) 
      unset($session->data); 

     return true; 
    } 

} 

?> 
+0

अन्य समस्या यह हो सकती है कि भंडारण (और Zend_Auth) में एक ही कॉन्फ़िगरेशन नहीं है। एक स्थान पर लिखना, दूसरे पर पढ़ना। – AsTeR

उत्तर

1

यह काम करना चाहिए।

यहां एथ getIdentity फ़ंक्शन का कार्यान्वयन है।

/** 
* Returns the identity from storage or null if no identity is available 
* 
* @return mixed|null 
*/ 
public function getIdentity() 
{ 
    $storage = $this->getStorage(); 

    if ($storage->isEmpty()) { 
     return null; 
    } 

    return $storage->read(); 
} 

यहाँ पीएचपी सत्र संग्रह लिखने के कार्यान्वयन है और कार्यों पढ़ें:

/** 
* Defined by Zend_Auth_Storage_Interface 
* 
* @return mixed 
*/ 
public function read() 
{ 
    return $this->_session->{$this->_member}; 
} 

/** 
* Defined by Zend_Auth_Storage_Interface 
* 
* @param mixed $contents 
* @return void 
*/ 
public function write($contents) 
{ 
    $this->_session->{$this->_member} = $contents; 
} 

क्या आप वाकई Zend_Auth वर्ग का एक ही उदाहरण लोड कर रहे हैं कर रहे हैं?

आप

$auth = Zend_Auth::getInstance(); 

उपयोग कर रहे हैं हो सकता है कि आप getIdentity विधि के बाद लिखने विधि बुला रहे हैं?

वैसे भी, जैसा कि मैंने पहले कहा था, आप क्या कर रहे हैं काम करना चाहिए।

+0

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

+0

बस स्टोरेज को सेट करने की पुष्टि करने के लिए सीधे मेरे लिए काम करता है। डिस्कनेक्ट होने पर डीबग मोड में पहचान को मजबूर करने के लिए मैं उस विधि का उपयोग करता हूं, इसलिए मैं अपने ओपन आईडी लॉगिन पेज से लॉग इन कर सकता हूं। मुझे लगता है कि यह एक सत्र मुद्दा है जैसा वर्णन किया गया है आपकी सबसे अधिक संभावना समस्या है। – Jai

0

तो पेज रीलोड पर आप सत्र ला सकते हैं, जबकि रीडायरेक्टिंग नहीं करते? क्या आप किसी भिन्न डोमेन-नाम पर रीडायरेक्ट कर रहे हैं? फिर यह कुकीज़ के साथ एक समस्या हो सकती है और आपको मैन्युअल रूप से session.cookie_domain ini चर सेट करने की आवश्यकता होगी।

जांचें कि PHPSESSID नाम की कुकी को ठीक से सेट किया गया है और यदि यह प्रत्येक पृष्ठ अनुरोध पर सर्वर पर भेजा जा रहा है? क्या यह निरंतर है या क्या यह हर अनुरोध पर बदलता है?

इसके अलावा, आप यह जांचना चाहेंगे कि सत्र डेटा को डिस्क पर ठीक से सहेजा जा रहा है या नहीं। सत्र ini चर session.save_path द्वारा परिभाषित निर्देशिका में पाया जा सकता है। क्या फ़ाइल आपके PHPSESSID से संबंधित है और क्या इसमें सार्थक प्रविष्टि है?

register_shutdown_function('session_write_close'); 

सूचकांक करने के लिए: मेरे मामले में यह

[email protected]:~# less /var/lib/php5/sess_081fee38856c59a563cc320899f6021f 
foo_auth|a:1:{s:7:"storage";a:1:{s:9:"user_id";s:2:"77";}} 
+0

गैर, यह वही डोमेन है। हालांकि, मैं कुकी की जांच करूंगा। इस समय तक मुझे यकीन है कि ग्लोबल वार्मिंग, हेह सहित यह काफी कुछ भी हो सकता है। – John

0

जोड़ें शामिल हैं।पहले php:

$application->bootstrap()->run(); 
+0

इससे मदद नहीं मिली –