【本地化Session】是什么意思啊
时间:2011-08-08
来源:互联网
看到Session库里:
setLocal(name, value) 设置本地化Session的值
getLocal(name) 获取本地化Session的值
不太理解。。
【本地化Session】是指什么啊?跟Session有什么区别吗? “本地”是指服务器还是客户端呢?
setLocal(name, value) 设置本地化Session的值
getLocal(name) 获取本地化Session的值
不太理解。。
【本地化Session】是指什么啊?跟Session有什么区别吗? “本地”是指服务器还是客户端呢?
作者: twoeo 发布时间: 2011-08-08
这个要参考 框架文件夹下的lib/Think/Util/Session.class.php,
我将主要代码列出来,分析一下
/**
+----------------------------------------------------------
* 设置当前项目的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
* @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值,这一点要特别注意!
我将主要代码列出来,分析一下
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'));
}
{
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
+----------------------------------------------------------
* @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['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
相关阅读 更多
热门阅读
-
office 2019专业增强版最新2021版激活秘钥/序列号/激活码推荐 附激活工具
阅读:74
-
如何安装mysql8.0
阅读:31
-
Word快速设置标题样式步骤详解
阅读:28
-
20+道必知必会的Vue面试题(附答案解析)
阅读:37
-
HTML如何制作表单
阅读:22
-
百词斩可以改天数吗?当然可以,4个步骤轻松修改天数!
阅读:31
-
ET文件格式和XLS格式文件之间如何转化?
阅读:24
-
react和vue的区别及优缺点是什么
阅读:121
-
支付宝人脸识别如何关闭?
阅读:21
-
腾讯微云怎么修改照片或视频备份路径?
阅读:28