www.gusucode.com > iWebshop开源PHP商城系统 v2.8源码程序 > iwebshop/lib/core/util/cookie_class.php
<?php /** * @copyright (c) 2009-2011 jooyea.cn * @file cookie_class.php * @brief 处理 Cookie * @author Ben * @date 2010-12-2 * @version 0.6 */ /** * @class ICookie * @brief ICookie的相关操作 */ class ICookie { //cookie前缀 private static $pre = 'iweb_'; //默认cookie密钥 private static $defaultKey = 'jooyea'; //安全级别 private static $level = 'normal'; //获取配置的前缀 private static function getPre() { if(isset(IWeb::$app->config['safePre'])) { return IWeb::$app->config['safePre']; } else { return self::$pre; } } //获取当前的安全级别 private static function getLevel() { if(isset(IWeb::$app->config['safeLevel'])) { return IWeb::$app->config['safeLevel']; } else { return self::$level; } } /** * @brief 设置cookie的方法 * @param string $name 字段名 * @param string $value 对应的值 * @param string $time 有效时间天数 * @param string $path 工作路径 * @param string $domain 作用域 */ public static function set($name,$value='',$time=7,$path='/',$domain=null) { if($time <= 0) { $expire = -100; } else { $expire = time() + 60 * 60 * 24 * $time; } self::$pre = self::getPre(); setCookie(self::$pre.'safecode',ICrypt::encode(self::cookieId(),self::getKey()),time() + 60 * 60 * 12 * 24 * 7,$path,$domain); if(is_array($value) || is_object($value)) $value=serialize($value); $value = ICrypt::encode($value , self::getKey() ); setCookie(self::$pre.$name,$value,$expire,$path,$domain); } /** * @brief 取得cookie字段值的方法 * @param string $name 字段名 * @return mixed 对应的值 */ public static function get($name) { self::$pre = self::getPre(); $is_checked = self::checkSafe(); if($is_checked == 1) { if(isset($_COOKIE[self::$pre.$name])) { $cookie= ICrypt::decode($_COOKIE[self::$pre.$name],self::getKey()); $tem = substr($cookie,0,10); if(preg_match('/^[Oa]:\d+:.*/',$tem)) return unserialize($cookie); else return $cookie; } return null; } else if($is_checked == 0) { self::clear(self::$pre.'safecode'); } return null; } /** * @brief 清除cookie值的方法 * @param string $name 字段名 */ public static function clear($name) { self::set($name,'',0); } /** * @brief 清除所有的cookie数据 */ public static function clearAll() { self::$pre = self::getPre(); $preLen = strlen(self::$pre); foreach($_COOKIE as $name => $val) { if(strpos($name,self::$pre) === 0) { self::clear(substr($name,$preLen)); } } } /** * @brief 安全检测函数 * @return int 1:表示通过,0:表示未通过 */ private static function checkSafe() { self::$pre = self::getPre(); if(isset($_COOKIE[self::$pre.'safecode'])) { if( self::cookieId() == ICrypt::decode($_COOKIE[self::$pre.'safecode'],self::getKey())) { return 1; } else { return 0; } } else { return -1; } } /** * @brief 取得密钥 * @return string 返回密钥值 */ private static function getKey() { $encryptKey = isset(IWeb::$app->config['encryptKey']) ? IWeb::$app->config['encryptKey'] : self::$defaultKey; $encryptKey .= self::cookieId(); return $encryptKey; } /** * @brief 取得cookie的安全码 * @return String cookie的安全码 */ private static function cookieId() { $level = self::getLevel(); if($level == 'none') { return ''; } else if($level == 'normal') { return md5(IClient::getIP()); } return md5(IClient::getIP().$_SERVER["HTTP_USER_AGENT"]); } } ?>