+ -
当前位置:首页 → 问答吧 → 【本地化Session】是什么意思啊

【本地化Session】是什么意思啊

时间:2011-08-08

来源:互联网

看到Session库里:
setLocal(name, value) 设置本地化Session的值
getLocal(name) 获取本地化Session的值

不太理解。。

【本地化Session】是指什么啊?跟Session有什么区别吗? “本地”是指服务器还是客户端呢?

作者: twoeo   发布时间: 2011-08-08

这个要参考 框架文件夹下的lib/Think/Util/Session.class.php,
我将主要代码列出来,分析一下
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 值
     * 返回之前设置
     +----------------------------------------------------------
     * @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 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
+----------------------------------------------------------
* @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 是以文本文件形式存储在服务器端的,

本地化session与session原理上是一样的,都是session变量,可用$_SESSION进行处理.
只不过,一般的$_SESSION变量存的时候都是直接$_SESSION['name'] = value 这样存储的,但是本地化session是 以一个数组的形式放在$_SESSION[$local]这个session中,比如Session::setLocal('name','jay');在php中存在$_SESSION[$local][name]='jay'中;普通的Session::set('name','jay'),实际的效果是$_SESSION['name']='jay';
在thinkphp的session类里,我们可以知道,在创建实例时,初始化方法里自动通过localName(APP_NAME),注册了一个以项目名为名的session变量,用于以后的本地化session存储、读取的使用。所以本地化session是放在二位数组中的,普通session是放在一维数组中的,这样做的好处是,避免session的命名的冲突,如果我们的项目中有了第三方的代码,其中有可能也用到session,我们只要使用本地化session,基本上就不会和其他的session造成同名冲突。当然避免用set方法,以项目名赋值session。这样会覆盖本地化session。而且本地化session的使用方法不同,注销方法也不同普通的用clear(),本地化的用clearLocal() ,并且本地化session的范围比session小,清空本地化session,只会注销掉本地化$_session[$local]变量,而clear()是清空所有的session值,这一点要特别注意!

作者: yangweijie   发布时间: 2011-08-09