2012-01-25 7 views
5

मैं यहाँ Zend प्रमाणन के माध्यम से एक प्रवेश प्रणाली बना दिया है अब कोडZend सत्र और Zend प्रमाणन

// userAuthentication 
    public function authAction(){ 
     $request  = $this->getRequest(); 
     $registry = Zend_Registry::getInstance(); 
     $auth  = Zend_Auth::getInstance(); 
     $DB = $registry['DB']; 
      $authAdapter = new Zend_Auth_Adapter_DbTable($DB); 
       $authAdapter->setTableName('user') 
          ->setIdentityColumn('user_name') 
          ->setCredentialColumn('user_password'); 

     $username = $request->getParam('username'); 
     $password = $request->getParam('password'); 
     $authAdapter->setIdentity($username); 
     $authAdapter->setCredential($password); 
     $result = $auth->authenticate($authAdapter); 

     if($result->isValid()){ 
      $data = $authAdapter->getResultRowObject(null,'password'); 
      $auth->getStorage()->write($data); 
      $this->_redirect('/login/controlpannel'); 
     }else{ 
      $this->_redirect('/login/login'); 
     } 
    } 

यह काम ठीक है। उपयोगकर्ता (तालिका) में user_id (कॉलम) है जहां उपयोगकर्ता नाम और पासवर्ड भी हैं। मैं जो सिर्फ लॉगिन इस तालिका से है कि विशिष्ट user_id हो और इतना है कि मैं इस $ user_id के खिलाफ कुछ जानकारी क्वेरी कर सकता है के माध्यम से

$user_session = new Zend_Session_Namespace('user_session'); 
$user_session->username = $username; 
$user_id->user_id  = $user_id; 

सत्र में डाल दिया और दृश्य में परिणाम पारित करने के लिए (नाम) ControlPanel जरूरत

+1

आप मैन्युअल रूप से सत्र में क्यों रखना चाहते हैं? यह लॉगिन के बाद सत्र बना देगा और आप इसे स्टोरेज से प्राप्त कर सकते हैं। –

+0

@Teez मैं भंडारण से user_id कैसे प्राप्त कर सकता हूं ??? –

+1

$ डेटा = Zend_Auth :: getInstance() -> getStorage() -> पढ़ें(); $ यह-> देखें-> उपयोगकर्ता नाम = $ डेटा-> user_name; $ यह-> देखें-> आईडी = $ डेटा-> user_id; जानकारी के लिए –

उत्तर

8

भंडारण से प्रयोक्ता आईडी प्राप्त करें:

$userInfo = Zend_Auth::getInstance()->getStorage()->read(); 

echo $userInfo->user_id; 
3

आप डेटा रास्ता Teez सुझाव है उपयोग कर सकते हैं या सिर्फ Zend_Session_Namespace से थोड़ा खींचें।

15.1.3.1। PHP सत्र
डिफ़ॉल्ट रूप से डिफ़ॉल्ट दृढ़ता, Zend_Auth PHP सत्र का उपयोग करके एक सफल प्रमाणीकरण प्रयास से पहचान का निरंतर भंडारण प्रदान करता है। एक सफल प्रमाणीकरण प्रयास पर, Zend_Auth :: प्रमाणीकरण() पहचान प्रमाणीकरण परिणाम से निरंतर भंडारण में संग्रहीत करता है। अन्यथा कॉन्फ़िगर नहीं किया गया है, Zend_Auth Zend_Auth_Storage_Session नामक स्टोरेज क्लास का उपयोग करता है, जो बदले में, Zend_Session का उपयोग करता है। एक कस्टम कक्षा का उपयोग ऑब्जेक्ट प्रदान करके किया जा सकता है जो Zend_Auth_Storage_Interface Zend_Auth :: setStorage() को लागू करता है।

Zend_Auth_Storage_Session 'Zend_Auth' के सत्र नामस्थान का उपयोग करता है। यह नामस्थान Zend_Auth_Storage_Session के कन्स्ट्रक्टर के लिए एक अलग मान पास करके ओवरराइड किया जा सकता है, और यह मान आंतरिक रूप से Zend_Session_Namespace के निर्माता के साथ पास किया गया है। यह प्रमाणीकरण का प्रयास करने से पहले होता है, क्योंकि Zend_Auth :: प्रमाणीकरण() पहचान का स्वचालित संग्रहण करता है।

+0

thanx sir –

+0

क्या एक अच्छा जवाब है। यह मेरी समस्या हल हो गया। धन्यवाद :-) –

8

हालांकि यह पहले से ही उत्तर था, मैं getStorage()->read() श्रृंखला की तुलना में अक्सर getIdentity() समारोह का उपयोग करते हैं। नीचे उदाहरण।

// to check if authenticated 
Zend_Auth::getInstance()->hasIdentity(); 

// to actually get the details from storage 
Zend_Auth::getInstance()->getIdentity()->user_id; 

// if I need to use the identity over and over 
$identity = Zend_Auth::getInstance()->getIdentity(); 
$userId = $identity->user_id; 
1

यह मेरा दृष्टिकोण है और यह अच्छा काम कर रहा है:

protected function _initSession() 
{ 

    $UserSession = new Zend_Session_Namespace('UserSession'); 
    $UserSession->setExpirationSeconds(/* you may fix a limit */); 
    Zend_Registry::set('UserSession', $UserSession); 
} 

/* लॉग इन कार्रवाई में, सही उपयोगकर्ता नाम & pwd के बाद बूटस्ट्रैप में एक init समारोह को परिभाषित करते हुए 1-i शुरू */

// Create session 
    $UserSession = Zend_Registry::get('UserSession'); 
// Get the user from database 
$db = Zend_Db_Table::getDefaultAdapter(); 
$user = $db->fetchRow("SELECT * FROM user_table WHERE user_email = '".$user_email."'"); 

//then you assign to $user to $UserSession variable : 
$UserSession->user = $user; 

//finaly don't forget to unset session variable in the Logout action ... 
+0

ऐसी क्वेरी से पहले उपयोगकर्ता ईमेल को sanitize/parametrize करना याद रखें;) – Asmodiel

2

एक सत्र के लिए एक सरणी सौंपते समय, आप, सत्र आप क्षेत्र बनाने के लिए कोई नाम देना होगा यानी आप setStorage करना चाहिए इससे पहले कि आप getStorage है।

आप इस तरह अपने कोड लिखना चाहिए: अपने भंडारण मूल्य प्राप्त करने के

// userAuthentication 
    public function authAction(){ 
     $request  = $this->getRequest(); 
     $registry = Zend_Registry::getInstance(); 
     $auth  = Zend_Auth::getInstance(); 
     $DB = $registry['DB']; 
      $authAdapter = new Zend_Auth_Adapter_DbTable($DB); 
       $authAdapter->setTableName('user') 
          ->setIdentityColumn('user_name') 
          ->setCredentialColumn('user_password'); 


     $username = $request->getParam('username'); 
     $password = $request->getParam('password'); 
     $authAdapter->setIdentity($username); 
     $authAdapter->setCredential($password); 
     $authAdapter->setStorage(new Zend_Auth_Storage_Session('User_Auth')); 
     $result = $auth->authenticate($authAdapter); 
     if($result->isValid()){ 
     $data = $authAdapter->getResultRowObject(null,'password'); 
     $auth->getStorage()->write($data); 
     $this->_redirect('/login/controlpannel'); 
     }else{ 
      $this->_redirect('/login/login'); 
     } 
    } 

और उसके बाद आप इस का उपयोग करना चाहिए:

$x = new Zend_Auth_Storage_Session('User_Auth'); 
$y = $x->read(); 

और आप एक वस्तु के रूप में $ y में सब कुछ मिलता है।

आनंद लें!

0
उपयोगकर्ता = Zend_Auth :: getInstance() -> getIdentity(); अगर (! @ $ यह-> उपयोगकर्ता) { $ objSession-> errorMsg = "कृपया पहले लॉगिन करें ..!"; $ यह -> _ रीडायरेक्ट ('/ उपयोगकर्ता/लॉगिन'); } ?>
+0

इस डेटा का उपयोग अपने डेटा के अनुसार संशोधित करें –