CrossPHP
  • Namespace
  • Class
  • Download

Namespaces

  • Cross
    • Auth
    • Cache
      • Driver
      • Request
    • Core
    • DB
      • Connecter
      • Drivers
      • SQLAssembler
    • Exception
    • Http
    • I
    • Lib
      • Document
    • Module
    • MVC
    • Runtime
  • None

Classes

  • Cross\Auth\CookieAuth
  • Cross\Auth\SessionAuth
  • Cross\Cache\Driver\FileCacheDriver
  • Cross\Cache\Driver\MemcacheDriver
  • Cross\Cache\Driver\RedisDriver
  • Cross\Cache\Request\FileCache
  • Cross\Cache\Request\Memcache
  • Cross\Cache\Request\RedisCache
  • Cross\Cache\RequestCache
  • Cross\Core\Annotate
  • Cross\Core\Application
  • Cross\Core\ArrayMap
  • Cross\Core\Config
  • Cross\Core\CrossArray
  • Cross\Core\Delegate
  • Cross\Core\FrameBase
  • Cross\Core\Helper
  • Cross\Core\HttpAuth
  • Cross\Core\Loader
  • Cross\Core\Rest
  • Cross\Core\Router
  • Cross\DB\Connecter\BaseConnecter
  • Cross\DB\Connecter\MySQLConnecter
  • Cross\DB\Connecter\PgSQLConnecter
  • Cross\DB\Connecter\SQLiteConnecter
  • Cross\DB\DBFactory
  • Cross\DB\Drivers\CouchDriver
  • Cross\DB\Drivers\MongoDriver
  • Cross\DB\Drivers\PDOSqlDriver
  • Cross\DB\SQLAssembler\MySQLAssembler
  • Cross\DB\SQLAssembler\PgSQLAssembler
  • Cross\DB\SQLAssembler\SQLAssembler
  • Cross\DB\SQLAssembler\SQLiteAssembler
  • Cross\Http\Request
  • Cross\Http\Response
  • Cross\Lib\Array2XML
  • Cross\Lib\Document\CallTree
  • Cross\Lib\Document\CallTreeToHTML
  • Cross\Lib\Document\HTML
  • Cross\Lib\StringToPHPStream
  • Cross\Module\SQLModule
  • Cross\MVC\Controller
  • Cross\MVC\Module
  • Cross\MVC\View
  • Cross\Runtime\ClosureContainer

Interfaces

  • Cross\I\CacheInterface
  • Cross\I\HttpAuthInterface
  • Cross\I\PDOConnecter
  • Cross\I\RequestCacheInterface
  • Cross\I\RouterInterface
  • Cross\I\SqlInterface

Exceptions

  • Cross\Exception\CacheException
  • Cross\Exception\CoreException
  • Cross\Exception\CrossException
  • Cross\Exception\FrontException

Functions

  • ascLogo
  • line
  • tBody
  • th
  • tHead
  1 <?php
  2 /**
  3  * Cross - a micro PHP 5 framework
  4  *
  5  * @link        http://www.crossphp.com
  6  * @license     MIT License
  7  */
  8 namespace Cross\Auth;
  9 
 10 use Cross\Core\Helper;
 11 use Cross\I\HttpAuthInterface;
 12 
 13 /**
 14  * @author wonli <wonli@live.com>
 15  * Class CookieAuth
 16  * @package cross\auth
 17  */
 18 class CookieAuth implements HttpAuthInterface
 19 {
 20     /**
 21      * 加解密默认key
 22      *
 23      * @var string
 24      */
 25     private $key = '!wl<@>c(r#%o*s&s';
 26 
 27     function __construct($key = '')
 28     {
 29         if ($key) {
 30             $this->key = $key;
 31         }
 32     }
 33 
 34     /**
 35      * 生成加密cookie
 36      *
 37      * @param string $name
 38      * @param string|array $params
 39      * @param int $expire
 40      * @return bool|mixed
 41      */
 42     function set($name, $params, $expire = 0)
 43     {
 44         if ($params === '' || $params === null) {
 45             $expire = time() - 3600;
 46             $value = null;
 47         } else {
 48             $encryptKey = $this->getEncryptKey($name);
 49             if (is_array($params)) {
 50                 $params = json_encode($params);
 51             }
 52             $value = Helper::authCode($params, 'ENCODE', $encryptKey);
 53             if ($expire > 0) {
 54                 $expire = time() + $expire;
 55             }
 56         }
 57 
 58         $cookie_domain = null;
 59         if (defined('COOKIE_DOMAIN')) {
 60             $cookie_domain = COOKIE_DOMAIN;
 61         }
 62 
 63         if (setcookie($name, $value, $expire, '/', $cookie_domain, null, true)) {
 64             return true;
 65         }
 66 
 67         return false;
 68     }
 69 
 70     /**
 71      * 从已加密的cookie中取出值
 72      *
 73      * @param string $params cookie的key
 74      * @param bool $deCode
 75      * @return bool|string
 76      */
 77     function get($params, $deCode = false)
 78     {
 79         if (false !== strpos($params, ':') && $deCode) {
 80             list($name, $arrKey) = explode(':', $params);
 81         } else {
 82             $name = $params;
 83         }
 84 
 85         if (!isset($_COOKIE[$name])) {
 86             return false;
 87         }
 88 
 89         $value = $_COOKIE[$name];
 90         $encryptKey = $this->getEncryptKey($name);
 91         $result = Helper::authCode($value, 'DECODE', $encryptKey);
 92         if (!$result) {
 93             return false;
 94         }
 95 
 96         if ($deCode) {
 97             $result = json_decode($result, true);
 98             if (isset($arrKey) && isset($result[$arrKey])) {
 99                 return $result[$arrKey];
100             }
101         }
102 
103         return $result;
104     }
105 
106     /**
107      * 生成密钥
108      *
109      * @param string $cookieName
110      * @return string
111      */
112     protected function getEncryptKey($cookieName)
113     {
114         if (isset($_SERVER['HTTP_USER_AGENT'])) {
115             $agent = strtolower($_SERVER['HTTP_USER_AGENT']);
116         } else {
117             $agent = 'agent';
118         }
119 
120         return md5($agent . $this->key . $cookieName);
121     }
122 }
123 
CrossPHP API documentation generated by ApiGen