/
  • استفاده از session در zf

  • صفحه‌ها (2):
  • ارسال پاسخ   امتیاز موضوع:
    • 0 رأی - میانگین امیتازات: 0
    • 1
    • 2
    • 3
    • 4
    • 5

    حالت موضوعی | حالت خطی استفاده از session در zf
    نویسنده پیام
    nasserghiasi آفلاین
    ناصر GH
    ***

    ارسال‌ها: 242
    تاریخ عضویت: ۱۳۸۸ آذر ۷
    اعتبار: 2
    تشکرها : 127
    ( 41 تشکر در 22 ارسال )
    ارسال: #1
    استفاده از session در zf
    چگونه در zf از سیشن ها استفاده کنیم؟
    مثلا برای ذخیره سیشن ها در دیتابیس منوال زند پیشنهاد کرده که کلاسی با مشخصات Zend_Auth_Storage_Interface ایجاد کنیم و توسط کد زیر در فایل bootstrap.php استفاده کنیم:
    کد PHP:
    $auth Zend_Auth::getInstance();
            
    $auth->setStorage(new Default_sessionStorage()); 

    ولی من نمی بینم رکوردی در جدول سیشن ها در دیتابیس ایجاد بکند!
    لطفا راهنمایی کنید
    ۱۳۸۸ بهمن ۲۶ ۰۸:۴۴ عصر
    یافتن ارسال‌ها WWW پاسخ با نقل قول
     تشکر شده توسط :
    admin آفلاین
    وحید سهرابلو
    **********

    ارسال‌ها: 5,697
    تاریخ عضویت: ۱۳۸۷ آذر ۲۴
    اعتبار: 100
    تشکرها : 1362
    ( 6197 تشکر در 3438 ارسال )
    ارسال: #2
    RE: استفاده از session در zf
    (۱۳۸۸ بهمن ۲۶ ۰۸:۴۴ عصر)nasserghiasi نوشته شده توسط:  چگونه در zf از سیشن ها استفاده کنیم؟
    مثلا برای ذخیره سیشن ها در دیتابیس منوال زند پیشنهاد کرده که کلاسی با مشخصات Zend_Auth_Storage_Interface ایجاد کنیم و توسط کد زیر در فایل bootstrap.php استفاده کنیم:
    کد PHP:
    $auth Zend_Auth::getInstance();
            
    $auth->setStorage(new Default_sessionStorage()); 

    ولی من نمی بینم رکوردی در جدول سیشن ها در دیتابیس ایجاد بکند!
    لطفا راهنمایی کنید

    شما دقیق سشن رو بخونید
    اگر توی تنظیمات سشن زده باشید داخل دیتابیس ذخیره کرده باشه ذخیره می کنه. Default_sessionStorage رو چطور تعریف کردید؟ در ضمن لازم نیست که حتما یه کلاس تعریف کنید
    (آخرین ویرایش در این ارسال: ۱۳۸۸ بهمن ۲۶ ۰۸:۵۳ عصر، توسط admin.)
    ۱۳۸۸ بهمن ۲۶ ۰۸:۵۰ عصر
    یافتن ارسال‌ها پاسخ با نقل قول
     تشکر شده توسط :
    nasserghiasi آفلاین
    ناصر GH
    ***

    ارسال‌ها: 242
    تاریخ عضویت: ۱۳۸۸ آذر ۷
    اعتبار: 2
    تشکرها : 127
    ( 41 تشکر در 22 ارسال )
    ارسال: #3
    RE: استفاده از session در zf
    تا اینجا متوجه شدم باید از کد زیر استفاده کنم:
    کد PHP:
    $config = array(
            
    'name'           => 'session_data',
            
    'primary'        => 'ID',
            
    'modifiedColumn' => 'modified',
            
    'dataColumn'     => 'data',
            
    'lifetimeColumn' => 'lifetime'
            
    );
            
            
    Zend_Session::setSaveHandler(new Zend_Session_SaveHandler_DbTable($config));
            
            
    Zend_Session::start(); 

    ضمنا من نمی تونم یه فیلد دیگه برای ذخیره در دیتابیس اضافه کنم؟ مثلا از http_user_agent یا memberID ؟
    (آخرین ویرایش در این ارسال: ۱۳۸۸ بهمن ۲۶ ۰۹:۱۸ عصر، توسط nasserghiasi.)
    ۱۳۸۸ بهمن ۲۶ ۰۹:۱۴ عصر
    یافتن ارسال‌ها WWW پاسخ با نقل قول
     تشکر شده توسط :
    admin آفلاین
    وحید سهرابلو
    **********

    ارسال‌ها: 5,697
    تاریخ عضویت: ۱۳۸۷ آذر ۲۴
    اعتبار: 100
    تشکرها : 1362
    ( 6197 تشکر در 3438 ارسال )
    ارسال: #4
    RE: استفاده از session در zf
    میشه‌ ولی باید یه کلاس دیگه که از کلاس Zend_Session_SaveHandler_DbTable ارثبری شده بگیرید. شما کلاس Zend_Session_SaveHandler_DbTable رو مطابعه کنید می تونید بفهمید که چه طور می تونید یه save handler بسازید
    ۱۳۸۸ بهمن ۲۶ ۰۹:۲۶ عصر
    یافتن ارسال‌ها پاسخ با نقل قول
     تشکر شده توسط : nasserghiasi
    nasserghiasi آفلاین
    ناصر GH
    ***

    ارسال‌ها: 242
    تاریخ عضویت: ۱۳۸۸ آذر ۷
    اعتبار: 2
    تشکرها : 127
    ( 41 تشکر در 22 ارسال )
    ارسال: #5
    RE: استفاده از session در zf
    ممنون
    ۱۳۸۸ بهمن ۲۶ ۰۹:۵۰ عصر
    یافتن ارسال‌ها WWW پاسخ با نقل قول
     تشکر شده توسط :
    nasserghiasi آفلاین
    ناصر GH
    ***

    ارسال‌ها: 242
    تاریخ عضویت: ۱۳۸۸ آذر ۷
    اعتبار: 2
    تشکرها : 127
    ( 41 تشکر در 22 ارسال )
    ارسال: #6
    RE: استفاده از session در zf
    من فکر می کردم این، سیشن های منقضی شده رو خودکار حذف می کنه!
    این که افزونگی داده میاره!
    خودش امکانشو داره یا من باید اینکارو بکنم؟
    (آخرین ویرایش در این ارسال: ۱۳۸۸ بهمن ۲۹ ۰۲:۰۲ صبح، توسط nasserghiasi.)
    ۱۳۸۸ بهمن ۲۹ ۰۲:۰۰ صبح
    یافتن ارسال‌ها WWW پاسخ با نقل قول
     تشکر شده توسط :
    admin آفلاین
    وحید سهرابلو
    **********

    ارسال‌ها: 5,697
    تاریخ عضویت: ۱۳۸۷ آذر ۲۴
    اعتبار: 100
    تشکرها : 1362
    ( 6197 تشکر در 3438 ارسال )
    ارسال: #7
    RE: استفاده از session در zf
    من سشن با دیتابیس کار نکردم
    باید جستجو کنید. ببینید به نتیجه می رسید اگر رسیدید اینجا هم اعلام کنید
    ۱۳۸۸ اسفند ۱ ۱۱:۲۸ صبح
    یافتن ارسال‌ها پاسخ با نقل قول
     تشکر شده توسط :
    nasserghiasi آفلاین
    ناصر GH
    ***

    ارسال‌ها: 242
    تاریخ عضویت: ۱۳۸۸ آذر ۷
    اعتبار: 2
    تشکرها : 127
    ( 41 تشکر در 22 ارسال )
    ارسال: #8
    RE: استفاده از session در zf
    آقا من واسه خودم یه save handler ساختم ولی تابع write فراخوانی نمی شه! و اصلا تو دیتابیس ثبت نمی کنه
    کد PHP:
    <?php
    class NAG_sessionStorage implements Zend_Session_SaveHandler_Interface
    {
        protected 
    $tableName;
        protected 
    $db;
        protected 
    $sessionLifetime;
        protected 
    $_sessionSavePath;
        protected 
    $_sessionName;
        
        
        public function 
    __construct()
        {
            
    $this->db Zend_Registry::get('db');
            
    $this->config Zend_Registry::get("config");  
            
    $this->sessionLifetime $this->config->session->gc_maxlifetime;
            
    $this->gc_probability $this->config->session->gc_probability;
            
    $this->gc_divisor $this->config->session->gc_divisor;
            
    $this->tableName $this->config->session->database->tableName;
        }
        
        
    /**
         * Destructor
         *
         * @return void
         */
        
    public function __destruct()
        {
            
    Zend_Session::writeClose();
        }
        
        public function 
    getMember()
        {
            
    // call the garbage collector
            
    $this->gc($this->sessionLifetime);
            
    // counts the rows from the database
            
    $result $this->db->fetchRow("
                SELECT
                    COUNT(ID) as count
                FROM " 
    $this->tableName "

            "
    );
            
    // return the number of found rows
            
    return $result["count"];
        }
        
        
    /**
         * Open Session
         *
         * @param string $save_path
         * @param string $name
         * @return boolean
         */
        
    public function open($save_path$name)
        {
            
    $this->_sessionSavePath $save_path;
            
    $this->_sessionName     $name;

            return 
    true;
        }

        
        
    /**
         * Read session data
         *
         * @param string $id
         * @return string
         */
        
    public function read($id)
        {
            
            
    $return '';

            
    $result "SELECT *  FROM " $this->tableName " WHERE ID = " $this->db->quote($id) . " LIMIT 1;";
            
    $rows $this->db->fetchRow($result);

            if (
    count($rows)) {
                if ((
    $rows['modified'] + $rows['lifetime'])   > time()) {
                    
    $return $rows['data'];
                } else {
                    
    $this->destroy($id);
                }
            }
            return 
    $return;
        }

        
    /**
         * Write session data
         *
         * @param string $id
         * @param string $data
         * @return boolean
         */
        
    public function write($id$data)
        {
            
    $return false;

            
    $fields = array(
                
    'ID' => $id 
                
    'useragent' => $_SERVER["HTTP_USER_AGENT"] , 
                
    'data'      => $data,
                
    'lifetime' => $this->sessionLifetime 
                
    'modified' => time());
            
            
    $select $this->db->select();
            
    $select->from($this->tableName);
            
    $select->where('ID = '.$this->db->quote($id));
            
            
    $rows $this->db->fetchRow($select); 

            if (
    count($rows)) {

                if (
    $this->db->update($this->tableName$fields'ID = '.$this->db->quote($id))) {
                    
    $return true;
                }
            } else {

                if (
    $this->db->insert($this->tableName$fields)) {
                    
    $return true;
                }
            }

            return 
    $return;
        }
        
        
        
    /**
         * Close session
         *
         * @return boolean
         */
        
    public function close()
        {
            return 
    true;
        }
        
        
    /**
         * Destroy session
         *
         * @param string $id
         * @return boolean
         */
        
    public function destroy($id)
        {
            
    $return false;

            if (
    $this->db->delete($this->tableName,'ID = '.$this->db->quote($id))) {
                
    $return true;
            }

            return 
    $return;
        }

        
    /**
         *  Custom gc() function (garbage collector)
         *
         *  @access private
         */
        
    function gc($maxlifetime)
        {
            
    // it deletes expired sessions from database 
            
    $result $this->db->delete($this->tableName"modified < " $this->db->quote(time()));
        }

    ۱۳۸۸ اسفند ۲ ۱۰:۴۱ عصر
    یافتن ارسال‌ها WWW پاسخ با نقل قول
     تشکر شده توسط :
    admin آفلاین
    وحید سهرابلو
    **********

    ارسال‌ها: 5,697
    تاریخ عضویت: ۱۳۸۷ آذر ۲۴
    اعتبار: 100
    تشکرها : 1362
    ( 6197 تشکر در 3438 ارسال )
    ارسال: #9
    RE: استفاده از session در zf
    http://devzone.zend.com/article/141
    یه‌ نگاهی بهش بندازین
    چه طوری از کدتون استفاده می کنین؟
    ۱۳۸۸ اسفند ۳ ۱۲:۴۳ صبح
    یافتن ارسال‌ها پاسخ با نقل قول
     تشکر شده توسط : nasserghiasi
    nasserghiasi آفلاین
    ناصر GH
    ***

    ارسال‌ها: 242
    تاریخ عضویت: ۱۳۸۸ آذر ۷
    اعتبار: 2
    تشکرها : 127
    ( 41 تشکر در 22 ارسال )
    ارسال: #10
    RE: استفاده از session در zf
    اینطوری:
    کد PHP:
        Zend_Session::setSaveHandler(new NAG_sessionStorage($config) );

            
    Zend_Session::start();


            
    // new instances
            
    $session = new Zend_Session_Namespace('NAG');
            
    Zend_Registry::set('session'$session);
            
    $this->session $session
    ۱۳۸۸ اسفند ۳ ۰۱:۲۹ صبح
    یافتن ارسال‌ها WWW پاسخ با نقل قول
     تشکر شده توسط :
    « قدیمی تر | تازه‌ تر »

  • صفحه‌ها (2):
  • ارسال پاسخ
    پرش به انجمن:


    کاربرانِ درحال بازدید از این موضوع: 1 مهمان
    IranPHP.org | تماس با ما | بازگشت به بالا | بازگشت به محتوا | بایگانی | پیوند سایتی RSS