| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628 |
- <?php
- // +----------------------------------------------------------------------
- // | ThinkPHP [ WE CAN DO IT JUST THINK IT ]
- // +----------------------------------------------------------------------
- // | Copyright (c) 2006-2012 http://thinkphp.cn All rights reserved.
- // +----------------------------------------------------------------------
- // | Licensed ( http://www.apache.org/licenses/LICENSE-2.0 )
- // +----------------------------------------------------------------------
- // | Author: liu21st <liu21st@gmail.com>
- // +----------------------------------------------------------------------
- // $Id: Session.class.php 2702 2012-02-02 12:35:01Z liu21st $
- 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();
|