<?php
define("HTTP_SESSION_STARTED", 1);
define("HTTP_SESSION_CONTINUED", 2);
/**
+------------------------------------------------------------------------------
* Session管理类
+------------------------------------------------------------------------------
* @category Think
* @package Think
* @subpackage Util
* @author liu21st <liu21st@gmail.com>
* @version $Id: Session.class.php 2702 2012-02-02 12:35:01Z liu21st $
+------------------------------------------------------------------------------
*/
class Session {
/**
+----------------------------------------------------------
* 启动Session
+----------------------------------------------------------
* @static
* @access public
+----------------------------------------------------------
* @return void
+----------------------------------------------------------
*/
static function start() {
session_start();
if (!isset($_SESSION['__HTTP_Session_Info'])) {
$_SESSION['__HTTP_Session_Info'] = HTTP_SESSION_STARTED;
} else {
$_SESSION['__HTTP_Session_Info'] = HTTP_SESSION_CONTINUED;
}
Session::setExpire(C('SESSION_EXPIRE'));
}
/**
+----------------------------------------------------------
* 暂停Session
+----------------------------------------------------------
* @static
* @access public
+----------------------------------------------------------
* @return void
+----------------------------------------------------------
*/
static function pause() {
session_write_close();
}
/**
+----------------------------------------------------------
* 清空Session
+----------------------------------------------------------
* @static
* @access public
+----------------------------------------------------------
* @return void
+----------------------------------------------------------
*/
static function clearLocal() {
$local = Session::localName();
unset($_SESSION[$local]);
}
/**
+----------------------------------------------------------
* 清空Session
+----------------------------------------------------------
* @static
* @access public
+----------------------------------------------------------
* @return void
+----------------------------------------------------------
*/
static function clear() {
$_SESSION = array();
}
/**
+----------------------------------------------------------
* 销毁Session
+----------------------------------------------------------
* @static
* @access public
+----------------------------------------------------------
* @return void
+----------------------------------------------------------
*/
static function destroy() {
unset($_SESSION);
session_destroy();
}
/**
+----------------------------------------------------------
* 检测SessionID
+----------------------------------------------------------
* @static
* @access public
+----------------------------------------------------------
* @return void
+----------------------------------------------------------
*/
static function detectID() {
if(session_id()!='') {
return session_id();
}
if (Session::useCookies()) {
if (isset($_COOKIE[Session::name()])) {
return $_COOKIE[Session::name()];
}
} else {
if (isset($_GET[Session::name()])) {
return $_GET[Session::name()];
}
if (isset($_POST[Session::name()])) {
return $_POST[Session::name()];
}
}
return null;
}
/**
+----------------------------------------------------------
* 设置或者获取当前Session name
+----------------------------------------------------------
* @param string $name session名称
+----------------------------------------------------------
* @static
* @access public
+----------------------------------------------------------
* @return string 返回之前的Session name
+----------------------------------------------------------
*/
static function name($name = null) {
return isset($name) ? session_name($name) : session_name();
}
/**
+----------------------------------------------------------
* 设置或者获取当前SessionID
+----------------------------------------------------------
* @param string $id sessionID
+----------------------------------------------------------
* @static
* @access public
+----------------------------------------------------------
* @return void 返回之前的sessionID
+----------------------------------------------------------
*/
static function id($id = null) {
return isset($id) ? session_id($id) : session_id();
}
/**
+----------------------------------------------------------
* 设置或者获取当前Session保存路径
+----------------------------------------------------------
* @param string $path 保存路径名
+----------------------------------------------------------
* @access public
+----------------------------------------------------------
* @return string
+----------------------------------------------------------
*/
static function path($path = null) {
return !empty($path)? session_save_path($path):session_save_path();
}
/**
+----------------------------------------------------------
* 设置Session 过期时间
+----------------------------------------------------------
* @param integer $time 过期时间
* @param boolean $add 是否为增加时间
+----------------------------------------------------------
* @static
* @access public
+----------------------------------------------------------
* @return void
+----------------------------------------------------------
*/
static function setExpire($time, $add = false) {
if ($add) {
if (!isset($_SESSION['__HTTP_Session_Expire_TS'])) {
$_SESSION['__HTTP_Session_Expire_TS'] = time() + $time;
}
// update session.gc_maxlifetime
$currentGcMaxLifetime = Session::setGcMaxLifetime(null);
Session::setGcMaxLifetime($currentGcMaxLifetime + $time);
} elseif (!isset($_SESSION['__HTTP_Session_Expire_TS'])) {
$_SESSION['__HTTP_Session_Expire_TS'] = $time;
}
}
/**
+----------------------------------------------------------
* 设置Session 闲置时间
+----------------------------------------------------------
* @param integer $time 闲置时间
* @param boolean $add 是否为增加时间
+----------------------------------------------------------
* @static
* @access public
+----------------------------------------------------------
* @return void
+----------------------------------------------------------
*/
static function setIdle($time, $add = false) {
if ($add) {
$_SESSION['__HTTP_Session_Idle'] = $time;
} else {
$_SESSION['__HTTP_Session_Idle'] = $time - time();
}
}
/**
+----------------------------------------------------------
* 取得Session 有效时间
+----------------------------------------------------------
* @static
* @access public
+----------------------------------------------------------
* @return void
+----------------------------------------------------------
*/
static function sessionValidThru() {
if (!isset($_SESSION['__HTTP_Session_Idle_TS']) || !isset($_SESSION['__HTTP_Session_Idle'])) {
return 0;
} else {
return $_SESSION['__HTTP_Session_Idle_TS'] + $_SESSION['__HTTP_Session_Idle'];
}
}
/**
+----------------------------------------------------------
* 检查Session 是否过期
+----------------------------------------------------------
* @static
* @access public
+----------------------------------------------------------
* @return boolean
+----------------------------------------------------------
*/
static function isExpired() {
if (isset($_SESSION['__HTTP_Session_Expire_TS']) && $_SESSION['__HTTP_Session_Expire_TS'] < time()) {
return true;
} else {
return false;
}
}
/**
+----------------------------------------------------------
* 检查Session 是否闲置
+----------------------------------------------------------
* @static
* @access public
+----------------------------------------------------------
* @return void
+----------------------------------------------------------
*/
static function isIdle() {
if (isset($_SESSION['__HTTP_Session_Idle_TS']) && (($_SESSION['__HTTP_Session_Idle_TS'] + $_SESSION['__HTTP_Session_Idle']) < time())) {
return true;
} else {
return false;
}
}
/**
+----------------------------------------------------------
* 更新Session 闲置时间
+----------------------------------------------------------
* @static
* @access public
+----------------------------------------------------------
* @return void
+----------------------------------------------------------
*/
static function updateIdle() {
$_SESSION['__HTTP_Session_Idle_TS'] = time();
}
/**
+----------------------------------------------------------
* 设置Session 对象反序列化时候的回调函数
* 返回之前设置
+----------------------------------------------------------
* @param string $callback 回调函数方法名
+----------------------------------------------------------
* @static
* @access public
+----------------------------------------------------------
* @return boolean
+----------------------------------------------------------
*/
static function setCallback($callback = null) {
$return = ini_get('unserialize_callback_func');
if (!empty($callback)) {
ini_set('unserialize_callback_func',$callback);
}
return $return;
}
/**
+----------------------------------------------------------
* 设置Session 是否使用cookie
* 返回之前设置
+----------------------------------------------------------
* @param boolean $useCookies 是否使用cookie
+----------------------------------------------------------
* @static
* @access public
+----------------------------------------------------------
* @return boolean
+----------------------------------------------------------
*/
static function useCookies($useCookies = null) {
$return = ini_get('session.use_cookies') ? true : false;
if (isset($useCookies)) {
ini_set('session.use_cookies', $useCookies ? 1 : 0);
}
return $return;
}
/**
+----------------------------------------------------------
* 检查Session 是否新建
+----------------------------------------------------------
* @param boolean $useCookies 是否使用cookie
+----------------------------------------------------------
* @static
* @access public
+----------------------------------------------------------
* @return boolean
+----------------------------------------------------------
*/
static function isNew() {
return !isset($_SESSION['__HTTP_Session_Info']) ||
$_SESSION['__HTTP_Session_Info'] == HTTP_SESSION_STARTED;
}
/**
+----------------------------------------------------------
* 取得当前项目的Session 值
* 返回之前设置
+----------------------------------------------------------
* @param string $name
+----------------------------------------------------------
* @static
* @access public
+----------------------------------------------------------
* @return boolean
+----------------------------------------------------------
*/
static function getLocal($name) {
$local = Session::localName();
if (!is_array($_SESSION[$local])) {
$_SESSION[$local] = array();
}
return $_SESSION[$local][$name];
}
/**
+----------------------------------------------------------
* 取得当前项目的Session 值
* 返回之前设置
+----------------------------------------------------------
* @param string $name
+----------------------------------------------------------
* @static
* @access public
+----------------------------------------------------------
* @return boolean
+----------------------------------------------------------
*/
static function get($name) {
if(isset($_SESSION[$name])) {
return $_SESSION[$name];
}else {
return null;
}
}
/**
+----------------------------------------------------------
* 设置当前项目的Session 值
* 返回之前设置
+----------------------------------------------------------
* @param string $name
* @param mixed $value
+----------------------------------------------------------
* @static
* @access public
+----------------------------------------------------------
* @return boolean
+----------------------------------------------------------
*/
static function setLocal($name, $value) {
$local = Session::localName();
if (!is_array($_SESSION[$local])) {
$_SESSION[$local] = array();
}
if (null === $value) {
unset($_SESSION[$local][$name]);
} else {
$_SESSION[$local][$name] = $value;
}
return;
}
/**
+----------------------------------------------------------
* 设置当前项目的Session 值
* 返回之前设置
+----------------------------------------------------------
* @param string $name
* @param mixed $value
+----------------------------------------------------------
* @static
* @access public
+----------------------------------------------------------
* @return boolean
+----------------------------------------------------------
*/
static function set($name, $value) {
if (null === $value) {
unset($_SESSION[$name]);
} else {
$_SESSION[$name] = $value;
}
return ;
}
/**
+----------------------------------------------------------
* 检查Session 值是否已经设置
+----------------------------------------------------------
* @param string $name
+----------------------------------------------------------
* @static
* @access public
+----------------------------------------------------------
* @return boolean
+----------------------------------------------------------
*/
static function is_setLocal($name) {
$local = Session::localName();
return isset($_SESSION[$local][$name]);
}
/**
+----------------------------------------------------------
* 检查Session 值是否已经设置
+----------------------------------------------------------
* @param string $name
+----------------------------------------------------------
* @static
* @access public
+----------------------------------------------------------
* @return boolean
+----------------------------------------------------------
*/
static function is_set($name) {
return isset($_SESSION[$name]);
}
/**
+----------------------------------------------------------
* 设置或者获取 Session localname
+----------------------------------------------------------
* @param string $name
+----------------------------------------------------------
* @static
* @access public
+----------------------------------------------------------
* @return string
+----------------------------------------------------------
*/
static function localName($name = null) {
$return = (isset($GLOBALS['__HTTP_Session_Localname'])) ? $GLOBALS['__HTTP_Session_Localname'] : null;
if (!empty($name)) {
$GLOBALS['__HTTP_Session_Localname'] = md5($name);
}
return $return;
}
/**
+----------------------------------------------------------
* Session 初始化
+----------------------------------------------------------
* @static
* @access private
+----------------------------------------------------------
* @return boolean
+----------------------------------------------------------
*/
static function _init() {
ini_set('session.auto_start', 0);
if (is_null(Session::detectID())) {
Session::id(uniqid(dechex(mt_rand())));
}
// 设置Session有效域名
Session::setCookieDomain(C('COOKIE_DOMAIN'));
//设置当前项目运行脚本作为Session本地名
Session::localName(APP_NAME);
Session::name(C('SESSION_NAME'));
Session::path(C('SESSION_PATH'));
Session::setCallback(C('SESSION_CALLBACK'));
}
/**
+----------------------------------------------------------
* 设置Session use_trans_sid
* 返回之前设置
+----------------------------------------------------------
* @param string $useTransSID
+----------------------------------------------------------
* @static
* @access public
+----------------------------------------------------------
* @return string
+----------------------------------------------------------
*/
static function useTransSID($useTransSID = null) {
$return = ini_get('session.use_trans_sid') ? true : false;
if (isset($useTransSID)) {
ini_set('session.use_trans_sid', $useTransSID ? 1 : 0);
}
return $return;
}
/**
+----------------------------------------------------------
* 设置Session cookie_domain
* 返回之前设置
+----------------------------------------------------------
* @param string $sessionDomain
+----------------------------------------------------------
* @static
* @access public
+----------------------------------------------------------
* @return string
+----------------------------------------------------------
*/
static function setCookieDomain($sessionDomain = null) {
$return = ini_get('session.cookie_domain');
if(!empty($sessionDomain)) {
ini_set('session.cookie_domain', $sessionDomain);//跨域访问Session
}
return $return;
}
/**
+----------------------------------------------------------
* 设置Session gc_maxlifetime值
* 返回之前设置
+----------------------------------------------------------
* @param string $gc_maxlifetime
+----------------------------------------------------------
* @static
* @access public
+----------------------------------------------------------
* @return string
+----------------------------------------------------------
*/
static function setGcMaxLifetime($gcMaxLifetime = null) {
$return = ini_get('session.gc_maxlifetime');
if (isset($gcMaxLifetime) && is_int($gcMaxLifetime) && $gcMaxLifetime >= 1) {
ini_set('session.gc_maxlifetime', $gcMaxLifetime);
}
return $return;
}
/**
+----------------------------------------------------------
* 设置Session gc_probability 值
* 返回之前设置
+----------------------------------------------------------
* @param string $gc_maxlifetime
+----------------------------------------------------------
* @static
* @access public
+----------------------------------------------------------
* @return string
+----------------------------------------------------------
*/
static function setGcProbability($gcProbability = null) {
$return = ini_get('session.gc_probability');
if (isset($gcProbability) && is_int($gcProbability) && $gcProbability >= 1 && $gcProbability <= 100) {
ini_set('session.gc_probability', $gcProbability);
}
return $return;
}
/**
+----------------------------------------------------------
* 当前Session文件名
+----------------------------------------------------------
* @access public
+----------------------------------------------------------
* @return string
+----------------------------------------------------------
*/
static function getFilename() {
return Session::path().'/sess_'.session_id();
}
}//类定义结束
Session::_init();
PHP Session操作类
最新推荐文章于 2021-04-12 19:12:13 发布