大佬教程收集整理的这篇文章主要介绍了ThinkPHP中session函数详解,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
在php中使用$_SESSION来操作session,而Thinkphp提供了session的封装函数session()。单单这一个函数就实现了session的增删改查的功能。下面我们分别来看其应用与实现。
该session()函数的定义是在Common/functions.php中定义。
session配置
session($name='',$value='')函数有两个参数,$name为数组的时候是对session进行设置。使用如下:
'name',‘path'=>'/tmp/',‘expire'=>0
);
session($
Name);
这些是在开启session之前进行设置的。在Thinkphp中定义该函数的时候是先判断$name是否为数组,如果为数组的话就说明是在对session进行设置,然后进入相应的代码执行设置。
其实现代码如下:
php;">
if(is_array($
Name))
{ // session初始化 在session_start 之前调用
if(isset($name['prefix'])) C('SESSION_PREFIX',$name['prefix']
);
if(C('VAR_SESSION_ID') && isset($_
requEST[C('VAR_SESSION_ID')]))
{
session_id($_
requEST[C('VAR_SESSION_ID')]
);
}elseif(isset($name['id']))
{
session_id($name['id']
);
}
if('common'
!= APP_MOD
E){ // 其它模式可能不支持
ini_set('session.auto_start',0
);
}
if(isset($name['name'])) session_name($name['name']
);
if(isset($name['path'])) session_save_path($name['path']
);
if(isset($name['domain'])) ini_set('session.cookie_domain',$name['domain']
);
if(isset($name['expire']))
{
ini_set('session.gc_maxlifetime',$name['expire']
);
ini_set('session.cookie_lifetime',$name['expire']
);
}
if(isset($name['use_trans_sid'])) ini_set('session.use_trans_sid',$name['use_trans_sid']?1:0
);
if(isset($name['use_cookies'])) ini_set('session.use_cookies',$name['use_cookies']?1:0
);
if(isset($name['cache_limiter'])) session_cache_limiter($name['cache_limiter']
);
if(isset($name['cache_expire'])) session_cache_expire($name['cache_expire']
);
if(isset($name['type'])) C('SESSION_TYPE',$name['type']
);
……
}
在Thinkphp中,对于session的存储系统提供了mysql和memache两种数据库。当然默认情况下是使用文件存储。判断session存储方式的代码如下:
php;">
if(C('SESSION_TYPE'))
{ // 读取session驱动
$
type = c('SESSION_TYPE'
);
//系统调用mysql驱动程序
$class = strpos($type,'\\')? $type : 'Think\\Session\\Driver\\'. ucwords(strtolower($typ
E));
$hander = new $class(
); //实例化处理器
//注册处理器
session_set_save_handler(
array(&$hander,"open"),array(&$hander,"close"),"read"),"write"),"destroy"),"gc")
);
}
对于session存储系统的配置是通过配置选项SESSION_TYPE来设置的。
'Mysql' //将session存储在mysql数据库中
设置完成以后如果设置了session自动启动,那系统会自动开启session
);
如果想关闭session自启动,对选项SESSION_AUTO_START设置如下:
false
如果关闭了系统自启动,可以在项目的公共文件或者在控制器中通过手动调用session_start()来开启session。或者使用函数session(),其开启方法如下:
);
在Thinkphp中其实现代码如下:
php;">
if('[pause]'==$
Name){ // 暂停session
session_write_close(
);
}elseif('[start]'==$
Name){ // 启动session
session_start(
);
}elseif('[destroy]'==$
Name){ // 销毁session
$_SESSION = array(
);
session_unset(
);
session_destroy(
);
}elseif('[regenerate]'==$
Name){ // 重新生成id
session_regenerate_id(
);
}
session赋值
session赋值比较简单,直接使用:
);
除此之外对于键值还可以是多层的中间使用‘.'连接。
); //等价于 $_SESSION[‘name1'][‘name2'] = ‘onmpw';
在Thinkphp中对于session赋值的实现代码如下:
php;">
if(strpos($name,'.'))
{
list($name1,$name2) = explode('.',$
Name);
if($prefi
X){
$_SESSION[$prefix][$name1][$name2] = $value;
}else
{
$_SESSION[$name1][$name2] = $value;
}
}else
{
if($prefi
X){
$_SESSION[$prefix][$name] = $value;
}else
{
$_SESSION[$name] = $value;
}
}
$prefix是通过选项SESSION_PREFIX来配置的。
session取值
session取值相对来说也是比较简单的。
首先是获取全部的session,使用方法如下
);
此时得到的是一个数组。在Thinkphp中实现代码如下:
php;">
if(''===$
Name){
// 获取全部的session
return $prefix ? $_SESSION[$prefix] : $_SESSION;
}
再就是取出单个值
php;">
$value1 = session(‘name'
);
//或者
$value2 = session(‘name1.name2'
);
其实现代码如下:
php;">
if(strpos($name,'.'))
{
list($name1,$
Name);
return isset($_SESSION[$name1][$name2])?$_SESSION[$name1][$name2]:null;
}else
{
return isset($_SESSION[$name])?$_SESSION[$name]:null;
}
session删除
session的删除分为清空session,销毁session和删除单个session值。
先说清空session。清空session传参给$name的值为null
null); //清空session
其实现代码如下:
php;">
if(is_null($
Name))
{ // 清空session
if($prefi
X) {
unset($_SESSION[$prefix]
);
}else
{
$_SESSION = array(
);
}
}
清空session只是将session对应的文件或者表中的数据清除,但是文件还是会存在的。
销毁session
session(‘[destroy]');
其Thinkphp中的实现代码如下:
php;">
if('[destroy]'==$
Name){ // 销毁session
$_SESSION = array(
);
session_unset(
);
session_destroy(
);
}
销毁session和清空session不同的是销毁session会将文件一并销毁。
最后就是删除单个session值。使用方式如下
null);
删除单个session值,将第二个参数$value的值设为null即可删除。
php;">
if(is_null($
value))
{ // 删除session
if(strpos($name,'.'))
{
list($name1,$
Name);
if($prefi
X){
unset($_SESSION[$prefix][$name1][$name2]
);
}else
{
unset($_SESSION[$name1][$name2]
);
}
}else
{
if($prefi
X){
unset($_SESSION[$prefix][$name]
);
}else
{
unset($_SESSION[$name]
);
}
}
}
检查session
最后简单介绍对session的检查。检查是指一个变量是否存在。原生的php检查session变量是这样检查的
);
Thinkphp封装之后使用session()函数是这样检查
); //判断一个session是否已经设置
其代码实现也是利用了原生的检查的方式
php;">
$name = substr($name,1
);
if(strpos($name,'.'))
{ // 支持数组
list($name1,$
Name);
return $prefix?isset($_SESSION[$prefix][$name1][$name2]):isset($_SESSION[$name1][$name2]
);
}else
{
return $prefix?isset($_SESSION[$prefix][$name]):isset($_SESSION[$name]
);
}
以上几乎是对session()函数各个功能的使用介绍,以及Thinkphp是如何实现的。希望本文的内容对大家在使用Thinkphp过程中起到一些帮助作用。
大佬总结
以上是大佬教程为你收集整理的ThinkPHP中session函数详解全部内容,希望文章能够帮你解决ThinkPHP中session函数详解所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。