Пример #1
0
 /**
  * Populates the current user object with the information obtained from cookie.
  * This method is used when automatic login ({@link allowAutoLogin}) is enabled.
  * The user identity information is recovered from cookie.
  * Sufficient security measures are used to prevent cookie data from being tampered.
  * @see saveToCookie
  */
 protected function restoreFromCookie()
 {
     $app = Yii::app();
     $cookie = $app->getRequest()->getCookies()->itemAt($this->getStateKeyPrefix());
     if ($cookie && !empty($cookie->value) && ($data = $app->getSecurityManager()->validateData($cookie->value)) !== false) {
         $data = @unserialize($data);
         if (is_array($data) && isset($data[1], $data[2], $data[3])) {
             list($id, $name, $duration, $states) = $data;
             if (isset($id)) {
                 if ($this->beforeLogin($id, $states, true)) {
                     $this->changeIdentity($id, $name, $states);
                     if ($this->autoRenewCookie) {
                         $cookie->expire = time() + $duration;
                         $app->getRequest()->getCookies()->add($cookie->name, $cookie);
                     }
                     $this->afterLogin(true);
                 }
             } else {
                 //Guest vistor,read info from cookie
                 $this->changeIdentity($id, $name, $states);
                 if ($this->autoRenewCookie) {
                     $cookie->expire = time() + $duration;
                     $app->getRequest()->getCookies()->add($cookie->name, $cookie);
                 }
             }
         }
     } else {
         //new vistor setup coookie info
         $names['cart_ID'] = true;
         $names['guest_ID'] = true;
         $names['currency_ID'] = true;
         $guest_ID = guest::AddGuest();
         $currency_ID = 2;
         $cart_ID = cart::AddCart($guest_ID, $currency_ID);
         $this->setState('__states', $names);
         $this->setState('cart_ID', $cart_ID);
         $this->setState('guest_ID', $guest_ID);
         $this->setState('currency_ID', $currency_ID);
         $this->saveToCookie(31104000);
     }
 }