Пример #1
0
 public function count()
 {
     if (!isset(Yii::app()->session['counted_ip'])) {
         $userip = Yii::app()->request->userHostAddress;
         $ip = Ips::model()->find('ip=:ip AND time>:time', array(':ip' => $userip, ':time' => time() - 1 * 60 * 60 * 60));
         if (!$ip) {
             $ip = new Ips();
             $ip->referer = isset($_SERVER['HTTP_REFERER']) ? $_SERVER['HTTP_REFERER'] : '';
             $ip->agent = isset($_SERVER['HTTP_USER_AGENT']) ? $_SERVER['HTTP_USER_AGENT'] : '';
         }
         $ip->time = time();
         $ip->ip = $userip;
         $ip->save();
     }
     Yii::app()->session['counted_ip'] = true;
 }
Пример #2
0
 public function execute($filterChain)
 {
     // Execute this filter only once
     if ($this->isFirstCall()) {
         // Accessing to HTTP request
         $r = $this->getContext()->getRequest();
         // Accessing user session
         $user = $this->getContext()->getUser();
         // Setting the best language according to browser's language
         $lng = $r->getPreferredCulture(array('en', 'fr'));
         $hote = $this->getContext()->getRequest()->getHost();
         // Getting cookies
         $uid = $r->getCookie("uid");
         $pwd = $r->getCookie("pwd");
         // If cookies are matching with pattern
         if ($uid != null && preg_match('#([0-9a-f]{64})#', $pwd)) {
             // Getting user account from cache
             $q = Doctrine_Query::create()->from('Users u')->where("id = ?", $uid)->leftJoin("u.Ips i")->useQueryCache(true)->setQueryCacheLifeSpan(60 * 60 * 24)->useResultCache(true)->setResultCacheLifeSpan(60)->execute();
             if (isset($q[0])) {
                 $u = $q[0];
             }
             // AUTOLOGIN : If user found, password match and not already auth
             if (count($q) === 1 && $pwd == $u->getCookiesHash() && !$user->isAuthenticated()) {
                 // Access granted, Mr. Wayne.
                 $user->setAuthenticated(true);
                 // Updating last visit
                 Doctrine_Query::create()->update('Users')->set('updated_at', '"' . date("Y-m-d H:i:s") . '"')->where('id = ?', $u->getId())->execute();
                 // Loading permissions
                 $user->addCredential($u->getRole());
                 // If new client IP, storing it into DB allowing transfers
                 $needUpdateIP = true;
                 foreach ($u->Ips as $ip) {
                     // If IP is found, no update needed
                     if ($ip->getIp() == $r->getRemoteAddress()) {
                         $needUpdateIP = false;
                     }
                 }
                 if ($needUpdateIP) {
                     // Storing in DB
                     $ip = new Ips();
                     $ip->setIp($r->getRemoteAddress());
                     $ip->setUid($u->getId());
                     $ip->replace();
                 }
                 // Loading attributes
                 $user->setAttribute('id', $u->getId());
                 $user->setAttribute('username', (string) $u);
                 $user->setAttribute('avatar', $u->getAvatar());
                 $user->setAttribute('ses', $u);
                 // Creating a new token
                 if ($user->getAttribute('token') == null) {
                     $user->setAttribute('token', sha1(mt_rand(0, 9999) . time()));
                 }
             }
             // END AUTOLOGIN
             // If we're already logged in
             if ($user->isAuthenticated()) {
                 // If user doesn't exists anymore
                 if (!isset($u)) {
                     $user->setAuthenticated(false);
                 } else {
                     // If we're banned, auto disconnect member
                     if ($u->getRole() == "ban") {
                         return $this->context->getController()->redirect('membres/logout?token=' . $user->getAttribute("token"));
                     }
                     // Storing in online users
                     $sfCache = sfContext::getInstance()->getCache();
                     $onlineUsers = json_decode($sfCache->get("onlineUsers"), true);
                     $onlineUsers[$u->getSlug()] = array("username" => $u->getUsername(), "avatar" => $u->getAvatar(16), "slug" => $u->getSlug(), "time" => time());
                     ksort($onlineUsers);
                     $sfCache->set("onlineUsers", json_encode($onlineUsers));
                 }
             }
         }
     }
     // Execute next filter
     $filterChain->execute();
 }