Example #1
0
 /**
  * 跳转到上次记住的url
  */
 public function restore()
 {
     if (Session::has('redirect_url')) {
         $this->data = Session::get('redirect_url');
         Session::delete('redirect_url');
     }
 }
Example #2
0
 public function get_id($id)
 {
     $arr['msg'] = "this id is " . $id;
     $arr['id'] = $id;
     $arr["d"] = a2(5, 14);
     \think\Session::get("uid", $id);
     return $arr;
 }
Example #3
0
 public function reg($username, $password)
 {
     $user = M("user");
     $result = $user->where(array('username' => $username))->find();
     if ($result) {
         throw_out("has_been_reg");
     }
     $addArray = array();
     $addArray['username'] = $username;
     $addArray['password'] = $password;
     $uid = $user->add($addArray);
     \think\Session::set("uid", $uid);
     throw_out("success");
 }
Example #4
0
 /**
  * 生成请求令牌
  * @access public
  * @param string $name 令牌名称
  * @param mixed  $type 令牌生成方法
  * @return string
  */
 public function token($name = '__token__', $type = 'md5')
 {
     $type = is_callable($type) ? $type : 'md5';
     $token = call_user_func($type, $_SERVER['REQUEST_TIME_FLOAT']);
     if ($this->isAjax()) {
         header($name . ': ' . $token);
     }
     Session::set($name, $token);
     return $token;
 }
Example #5
0
 /**
  * Session管理
  * @param string|array  $name session名称,如果为数组表示进行session设置
  * @param mixed         $value session值
  * @param string        $prefix 前缀
  * @return mixed
  */
 function session($name, $value = '', $prefix = null)
 {
     if (is_array($name)) {
         // 初始化
         Session::init($name);
     } elseif (is_null($name)) {
         // 清除
         Session::clear('' === $value ? null : $value);
     } elseif ('' === $value) {
         // 判断或获取
         return 0 === strpos($name, '?') ? Session::has(substr($name, 1), $prefix) : Session::get($name, $prefix);
     } elseif (is_null($value)) {
         // 删除
         return Session::delete($name, $prefix);
     } else {
         // 设置
         return Session::set($name, $value, $prefix);
     }
 }
Example #6
0
 /**
  * 验证表单令牌
  * @access protected
  * @param mixed     $value  字段值
  * @param mixed     $rule  验证规则
  * @param array     $data  数据
  * @return bool
  */
 protected function token($value, $rule, $data)
 {
     $rule = !empty($rule) ? $rule : '__token__';
     if (!isset($data[$rule]) || !Session::has($rule)) {
         // 令牌数据无效
         return false;
     }
     // 令牌验证
     if (isset($data[$rule]) && Session::get($rule) === $data[$rule]) {
         // 防止重复提交
         Session::delete($rule);
         // 验证完成销毁session
         return true;
     }
     // 开启TOKEN重置
     Session::delete($rule);
     return false;
 }
Example #7
0
 /**
  * @covers think\Session::destroy
  *
  * @todo Implement testDestroy().
  */
 public function testDestroy()
 {
     \think\Session::set('sessionnamedestroy', 'sessionvalue');
     \think\Session::destroy();
     $this->assertEmpty($_SESSION['sessionnamedestroy']);
 }
Example #8
0
 /**
  * 执行应用程序
  * @access public
  * @return void
  */
 public static function run($config)
 {
     // 日志初始化
     Log::init($config['log']);
     // 缓存初始化
     Cache::connect($config['cache']);
     // 加载框架底层语言包
     if (is_file(THINK_PATH . 'Lang/' . strtolower($config['default_lang']) . EXT)) {
         Lang::set(include THINK_PATH . 'Lang/' . strtolower($config['default_lang']) . EXT);
     }
     if (is_file(APP_PATH . 'build.php')) {
         // 自动化创建脚本
         Create::build(include APP_PATH . 'build.php');
     }
     // 监听app_init
     Hook::listen('app_init');
     // 初始化公共模块
     define('COMMON_PATH', APP_PATH . $config['common_module'] . '/');
     self::initModule(COMMON_PATH, $config);
     // 启动session
     if (!IS_CLI) {
         Session::init($config['session']);
     }
     // 应用URL调度
     self::dispatch($config);
     // 监听app_run
     Hook::listen('app_run');
     // 执行操作
     if (!preg_match('/^[A-Za-z](\\/|\\w)*$/', CONTROLLER_NAME)) {
         // 安全检测
         $instance = false;
     } elseif ($config['action_bind_class']) {
         // 操作绑定到类:模块\controller\控制器\操作
         if (is_dir(MODULE_PATH . CONTROLLER_LAYER . '/' . CONTROLLER_NAME)) {
             $namespace = MODULE_NAME . '\\' . CONTROLLER_LAYER . '\\' . CONTROLLER_NAME . '\\';
         } else {
             // 空控制器
             $namespace = MODULE_NAME . '\\' . CONTROLLER_LAYER . '\\empty\\';
         }
         $actionName = strtolower(ACTION_NAME);
         if (class_exists($namespace . $actionName)) {
             $class = $namespace . $actionName;
         } elseif (class_exists($namespace . '_empty')) {
             // 空操作
             $class = $namespace . '_empty';
         } else {
             throw new Exception('_ERROR_ACTION_:' . ACTION_NAME);
         }
         $instance = new $class();
         // 操作绑定到类后 固定执行run入口
         $action = 'run';
     } else {
         $instance = Loader::controller(CONTROLLER_NAME);
         // 获取当前操作名
         $action = ACTION_NAME . $config['action_suffix'];
     }
     if (!$instance) {
         throw new Exception('[ ' . MODULE_NAME . '\\' . CONTROLLER_LAYER . '\\' . Loader::parseName(CONTROLLER_NAME, 1) . ' ] not exists');
     }
     try {
         // 操作方法开始监听
         $call = [$instance, $action];
         Hook::listen('action_begin', $call);
         if (!preg_match('/^[A-Za-z](\\w)*$/', $action)) {
             // 非法操作
             throw new \ReflectionException();
         }
         //执行当前操作
         $method = new \ReflectionMethod($instance, $action);
         if ($method->isPublic()) {
             // URL参数绑定检测
             if ($config['url_params_bind'] && $method->getNumberOfParameters() > 0) {
                 switch ($_SERVER['REQUEST_METHOD']) {
                     case 'POST':
                         $vars = array_merge($_GET, $_POST);
                         break;
                     case 'PUT':
                         parse_str(file_get_contents('php://input'), $vars);
                         break;
                     default:
                         $vars = $_GET;
                 }
                 $params = $method->getParameters();
                 $paramsBindType = $config['url_parmas_bind_type'];
                 foreach ($params as $param) {
                     $name = $param->getName();
                     if (1 == $paramsBindType && !empty($vars)) {
                         $args[] = array_shift($vars);
                     }
                     if (0 == $paramsBindType && isset($vars[$name])) {
                         $args[] = $vars[$name];
                     } elseif ($param->isDefaultValueAvailable()) {
                         $args[] = $param->getDefaultValue();
                     } else {
                         throw new Exception('_PARAM_ERROR_:' . $name);
                     }
                 }
                 array_walk_recursive($args, 'Input::filterExp');
                 $data = $method->invokeArgs($instance, $args);
             } else {
                 $data = $method->invoke($instance);
             }
             // 操作方法执行完成监听
             Hook::listen('action_end', $call);
             if (IS_API) {
                 // API接口返回数据
                 self::returnData($data, $config['default_ajax_return']);
             }
         } else {
             // 操作方法不是Public 抛出异常
             throw new \ReflectionException();
         }
     } catch (\ReflectionException $e) {
         // 操作不存在
         if (method_exists($instance, '_empty')) {
             $method = new \ReflectionMethod($instance, '_empty');
             $method->invokeArgs($instance, [$action, '']);
         } else {
             throw new Exception('[ ' . (new \ReflectionClass($instance))->getName() . ':' . $action . ' ] not exists ', 404);
         }
     }
     // 监听app_end
     Hook::listen('app_end');
     return;
 }
Example #9
0
 /**
  * 清除 Session
  *
  * @return $this
  */
 protected function removeSession()
 {
     Session::set($this->sessionName, null);
     return $this;
 }
Example #10
0
        return;
    }
    if (!S("ssid_" . $ssid)) {
        return;
    }
    //如果ssid没有被初始化
    $ssidarr = S("ssid_" . $ssid);
    if (!$ssidarr) {
        return;
    }
    if (!isset($ssidarr['session_die_time']) or $ssidarr['session_die_time'] > time()) {
        S("ssid_" . $_GET['ssid'], false);
        return;
    }
    foreach ($ssidarr as $k => $v) {
        \think\Session::set($k, $v);
    }
});
\think\Hook::add("app_end", function () {
    if (isset($_GET['ssid'])) {
        if (isset($_SESSION)) {
            S("ssid_" . $_GET['ssid'], $_SESSION);
        }
    }
});
function system_error($k)
{
    header("Content-type: application/json");
    $system_error = C("system_error");
    echo json_encode($system_error[$k]);
    die;
Example #11
0
 /**
  * 发送数据到客户端
  * @access public
  * @return mixed
  * @throws \InvalidArgumentException
  */
 public function send()
 {
     // 处理输出数据
     $data = $this->getContent();
     // Trace调试注入
     if (Env::get('app_trace', Config::get('app_trace'))) {
         Debug::inject($this, $data);
     }
     if (!headers_sent() && !empty($this->header)) {
         // 发送状态码
         http_response_code($this->code);
         // 发送头部信息
         foreach ($this->header as $name => $val) {
             header($name . ':' . $val);
         }
     }
     if (200 == $this->code) {
         $cache = Request::instance()->getCache();
         if ($cache) {
             header('Cache-Control: max-age=' . $cache[1] . ',must-revalidate');
             header('Last-Modified:' . gmdate('D, d M Y H:i:s') . ' GMT');
             header('Expires:' . gmdate('D, d M Y H:i:s', $_SERVER['REQUEST_TIME'] + $cache[1]) . ' GMT');
             $header['Content-Type'] = $this->header['Content-Type'];
             Cache::set($cache[0], [$data, $header], $cache[1]);
         }
     }
     echo $data;
     if (function_exists('fastcgi_finish_request')) {
         // 提高页面响应
         fastcgi_finish_request();
     }
     // 监听response_end
     Hook::listen('response_end', $this);
     // 清空当次请求有效的数据
     Session::flush();
 }
Example #12
0
 /**
  * 注册异常、autoload
  * 解析路由、加载配置
  * 启动session
  * 运行控制器
  *
  * @return void
  */
 public static function run()
 {
     // -------------------------------------------
     // 解析分配器,找到分组设置
     // -------------------------------------------
     Dispatch::init();
     // -------------------------------------------
     // 加载配置
     // -------------------------------------------
     static::load_config();
     // -------------------------------------------
     // 加载行为
     // -------------------------------------------
     static::load_tag();
     // -------------------------------------------
     // 语言包标签
     // -------------------------------------------
     Tag::listen('app_lang');
     // -------------------------------------------
     // 加载语言包
     // -------------------------------------------
     static::load_lang();
     // -------------------------------------------
     // 分配分组内路由细节
     // -------------------------------------------
     static::load_route();
     // -------------------------------------------
     // 项目初始化标签
     // -------------------------------------------
     Tag::listen('app_init');
     // -------------------------------------------
     // 初始化
     // -------------------------------------------
     static::init();
     // -------------------------------------------
     // 项目开始标签
     // -------------------------------------------
     Tag::listen('app_begin');
     // -------------------------------------------
     // Session初始化
     // -------------------------------------------
     Session::config(Config::get('SESSION_OPTIONS'));
     // -------------------------------------------
     // 记录应用初始化时间
     // -------------------------------------------
     Debug::mark('initTime');
     // -------------------------------------------
     // 项目执行前检查访问者权限
     // -------------------------------------------
     Tag::listen('app_auth');
     // -------------------------------------------
     // 执行程序
     // -------------------------------------------
     static::exec();
     // -------------------------------------------
     // 项目结束标签
     // -------------------------------------------
     Tag::listen('app_end');
     // -------------------------------------------
     // 保存日志记录
     // -------------------------------------------
     if (Config::get('LOG_RECORD')) {
         // Log::save();
         // Log::info('------------------- |' . CONTROLLER_NAME . ' & ' . ACTION_NAME);
     }
 }
Example #13
0
function session($name, $value = '', $prefix = null)
{
    if (is_array($name)) {
        // 初始化
        \think\Session::init($name);
    } elseif (is_null($name)) {
        // 清除
        \think\Session::clear($value);
    } elseif ('' === $value) {
        // 判断或获取
        return 0 === strpos($name, '?') ? \think\Session::has(substr($name, 1), $prefix) : \think\Session::get($name, $prefix);
    } elseif (is_null($value)) {
        // 删除session
        return \think\Session::delete($name, $prefix);
    } else {
        // 设置session
        return \think\Session::set($name, $value, $prefix);
    }
}
Example #14
0
 /**
  * 获取session数据
  * @access public
  * @param string|array  $name 数据名称
  * @param string        $default 默认值
  * @param string|array  $filter 过滤方法
  * @return mixed
  */
 public function session($name = '', $default = null, $filter = null)
 {
     if (is_array($name)) {
         return $this->session = array_merge($this->session, $name);
     } elseif (empty($this->session)) {
         $this->session = Session::get();
     }
     return $this->input($this->session, $name, $default, $filter);
 }
Example #15
0
    public function testThinkVar()
    {
        $config['tpl_begin'] = '{';
        $config['tpl_end'] = '}';
        $template = new Template($config);
        $_SERVER['SERVER_NAME'] = 'server_name';
        $_GET['action'] = 'action';
        $_POST['action'] = 'action';
        \think\Cookie::set('action', ['name' => 'name']);
        \think\Session::set('action', ['name' => 'name']);
        define('SITE_NAME', 'site_name');
        $content = <<<EOF
{\$Think.SERVER.SERVER_NAME}<br/>
{\$Think.GET.action}<br/>
{\$Think.POST.action}<br/>
{\$Think.COOKIE.action}<br/>
{\$Think.COOKIE.action.name}<br/>
{\$Think.SESSION.action}<br/>
{\$Think.SESSION.action.name}<br/>
{\$Think.ENV.OS}<br/>
{\$Think.REQUEST.action}<br/>
{\$Think.CONST.SITE_NAME}<br/>
{\$Think.LANG.action}<br/>
{\$Think.CONFIG.action.name}<br/>
{\$Think.NOW}<br/>
{\$Think.VERSION}<br/>
{\$Think.LDELIM}<br/>
{\$Think.RDELIM}<br/>
{\$Think.SITE_NAME}
EOF;
        $data = <<<EOF
<?php echo \$_SERVER['SERVER_NAME']; ?><br/>
<?php echo \$_GET['action']; ?><br/>
<?php echo \$_POST['action']; ?><br/>
<?php echo \\think\\Cookie::get('action'); ?><br/>
<?php echo \$_COOKIE['action']['name']; ?><br/>
<?php echo \\think\\Session::get('action'); ?><br/>
<?php echo \$_SESSION['action']['name']; ?><br/>
<?php echo \$_ENV['OS']; ?><br/>
<?php echo \$_REQUEST['action']; ?><br/>
<?php echo SITE_NAME; ?><br/>
<?php echo \\think\\Lang::get('action'); ?><br/>
<?php echo \\think\\Config::get('action.name'); ?><br/>
<?php echo date('Y-m-d g:i a',time()); ?><br/>
<?php echo THINK_VERSION; ?><br/>
<?php echo '{'; ?><br/>
<?php echo '}'; ?><br/>
<?php echo SITE_NAME; ?>
EOF;
        $template->parse($content);
        $this->assertEquals($data, $content);
    }
Example #16
0
function session($name, $value = '')
{
    if (is_array($name)) {
        // 初始化
        \think\Session::init($name);
    } elseif (is_null($name)) {
        // 清除
        \think\Session::clear($value);
    } elseif ('' === $value) {
        // 获取
        return \think\Session::get($name);
    } elseif (is_null($value)) {
        // 删除session
        return \think\Session::delete($name);
    } else {
        // 设置session
        return \think\Session::set($name, $value);
    }
}
Example #17
0
 /**
  * 获得用户保存的session值
  *
  * @return null|int,返回null表示用户未登录,返回int表示的是用户的$user_id
  */
 public function session()
 {
     return Session::get($this->auth_key);
 }