/** * 跳转到上次记住的url */ public function restore() { if (Session::has('redirect_url')) { $this->data = Session::get('redirect_url'); Session::delete('redirect_url'); } }
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; }
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"); }
/** * 生成请求令牌 * @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; }
/** * 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); } }
/** * 验证表单令牌 * @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; }
/** * @covers think\Session::destroy * * @todo Implement testDestroy(). */ public function testDestroy() { \think\Session::set('sessionnamedestroy', 'sessionvalue'); \think\Session::destroy(); $this->assertEmpty($_SESSION['sessionnamedestroy']); }
/** * 执行应用程序 * @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; }
/** * 清除 Session * * @return $this */ protected function removeSession() { Session::set($this->sessionName, null); return $this; }
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;
/** * 发送数据到客户端 * @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(); }
/** * 注册异常、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); } }
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); } }
/** * 获取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); }
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); }
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); } }
/** * 获得用户保存的session值 * * @return null|int,返回null表示用户未登录,返回int表示的是用户的$user_id */ public function session() { return Session::get($this->auth_key); }