Files
framework/library/think/session.php
thinkphp e96ac8493f session类和input类调整
注释调整
2015-02-23 20:54:16 +08:00

223 lines
6.7 KiB
PHP
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<?php
// +----------------------------------------------------------------------
// | ThinkPHP [ WE CAN DO IT JUST THINK ]
// +----------------------------------------------------------------------
// | Copyright (c) 2006~2015 http://thinkphp.cn All rights reserved.
// +----------------------------------------------------------------------
// | Licensed ( http://www.apache.org/licenses/LICENSE-2.0 )
// +----------------------------------------------------------------------
// | Author: liu21st <liu21st@gmail.com>
// +----------------------------------------------------------------------
namespace think;
class Session {
static protected $prefix = '';
/**
* 设置或者获取session作用域前缀
* @param string $prefix
* @return string|void
*/
static public function prefix($prefix=''){
if(empty($prefix)) {
return self::$prefix;
}else{
self::$prefix = $prefix;
}
}
/**
* session初始化
* @param array $config
* @return void
*/
static public function init($config=[]) {
if(isset($config['prefix'])){
self::$prefix = $config['prefix'];
}
if(isset($config['id'])) {
session_id($config['id']);
}
if(isset($config['name'])){
session_name($config['name']);
}
if(isset($config['path'])) {
session_save_path($config['path']);
}
if(isset($config['domain'])) {
ini_set('session.cookie_domain', $config['domain']);
}
if(isset($config['expire'])) {
ini_set('session.gc_maxlifetime', $config['expire']);
ini_set('session.cookie_lifetime', $config['expire']);
}
if(isset($config['use_trans_sid'])) {
ini_set('session.use_trans_sid', $config['use_trans_sid']?1:0);
}
if(isset($config['use_cookies'])) {
ini_set('session.use_cookies', $config['use_cookies']?1:0);
}
if(isset($config['cache_limiter'])) {
session_cache_limiter($config['cache_limiter']);
}
if(isset($config['cache_expire'])) {
session_cache_expire($config['cache_expire']);
}
if(!empty($config['type'])) { // 读取session驱动
$class = '\\think\\session\\driver\\'. ucwords(strtolower($config['type']));
// 检查驱动类
session_set_save_handler(new $class());
}
// 启动session
if(!empty($config['auto_start'])){
ini_set('session.auto_start', 0);
session_start();
}
}
/**
* session设置
* @param string $name session名称
* @param mixed $value session值
* @param string $prefix 作用域(前缀)
* @return void
*/
static public function set($name,$value='',$prefix='') {
$prefix = $prefix ? $prefix : self::$prefix;
if(strpos($name,'.')){
// 二维数组赋值
list($name1,$name2) = explode('.',$name);
if($prefix){
$_SESSION[$prefix][$name1][$name2] = $value;
}else{
$_SESSION[$name1][$name2] = $value;
}
}elseif($prefix){
$_SESSION[$prefix][$name] = $value;
}else{
$_SESSION[$name] = $value;
}
}
/**
* session获取
* @param string $name session名称
* @param string $prefix 作用域(前缀)
* @return mixed
*/
static public function get($name='',$prefix='') {
$prefix = $prefix ? $prefix : self::$prefix;
if(''==$name){
// 获取全部的session
$value = $prefix ? $_SESSION[$prefix] : $_SESSION;
}elseif($prefix){ // 获取session
if(strpos($name,'.')){
list($name1,$name2) = explode('.',$name);
$value = isset($_SESSION[$prefix][$name1][$name2])?$_SESSION[$prefix][$name1][$name2]:null;
}else{
$value = isset($_SESSION[$prefix][$name]) ? $_SESSION[$prefix][$name] : null;
}
}else{
if(strpos($name,'.')){
list($name1,$name2) = explode('.',$name);
$value = isset($_SESSION[$name1][$name2]) ? $_SESSION[$name1][$name2] : null;
}else{
$value = isset($_SESSION[$name]) ? $_SESSION[$name] : null;
}
}
return $value;
}
/**
* 删除session数据
* @param string $name session名称
* @param string $prefix 作用域(前缀)
* @return void
*/
static public function delete($name,$prefix='') {
$prefix = $prefix ? $prefix : self::$prefix;
if(strpos($name,'.')){
list($name1,$name2) = explode('.',$name);
if($prefix){
unset($_SESSION[$prefix][$name1][$name2]);
}else{
unset($_SESSION[$name1][$name2]);
}
}else{
if($prefix){
unset($_SESSION[$prefix][$name]);
}else{
unset($_SESSION[$name]);
}
}
}
/**
* 清空session数据
* @param string $prefix 作用域(前缀)
* @return void
*/
static public function clear($prefix='') {
$prefix = $prefix ? $prefix : self::$prefix;
if($prefix) {
unset($_SESSION[$prefix]);
}else{
$_SESSION = [];
}
}
/**
* 判断session数据
* @param string $name session名称
* @param mixed $value session值
* @return boolean
*/
static public function has($name,$prefix='') {
$prefix = $prefix ? $prefix : self::$prefix;
if(strpos($name,'.')){ // 支持数组
list($name1,$name2) = explode('.',$name);
return $prefix ? isset($_SESSION[$prefix][$name1][$name2]) : isset($_SESSION[$name1][$name2]);
}else{
return $prefix ? isset($_SESSION[$prefix][$name]) : isset($_SESSION[$name]);
}
}
/**
* 暂停session
* @return void
*/
static public function pause() {
// 暂停session
session_write_close();
}
/**
* 启动session
* @return void
*/
static public function start() {
session_start();
}
/**
* 销毁session
* @return void
*/
static public function destroy() {
$_SESSION = [];
session_unset();
session_destroy();
}
/**
* 重新生成session_id
* @return void
*/
static private function regenerate() {
session_regenerate_id();
}
}