thinkphp关于session的使用总结 24 August 2010 9:27 Tuesday by 小屋 分享收藏

ThinkPHP官方的说明文档

  1. start 启动session
  2. pause 暂停session
  3. clear 清除session
  4. destroy 销毁session
  5. get 获取session
  6. getLocal 获取私有session
  7. set 设置session
  8. setLocal 设置私有session
  9. name 获取或者设置session_name
  10. is_set 是否设置session
  11. is_setLocal 是否设置私有session
  12. id 获取或者设置session_id
  13. path 获取或者设置session_save_path
  14. setExpire 设置session过期时 间
  15. setCookieDomain 设置有效域名
  16. setCallback 设置Session 对象反序列化时候的回调函数

最常用的操作方法示例:

代码:
  1. // 检测Session变量是否存在
  2. Session::is_set('name');
  3.  
  4. // 给Session变 量赋值
  5.  
  6. Session::set('name','value');
  7.  
  8. // 获取Session变量
  9.  
  10. Session::get('name');

和Session相关的配置参数:

代码:
  1. 'SESSION_NAME'=>'ThinkID',                // 默认Session_name
  2.         
  3. 'SESSION_PATH'=>'',                        // 采用默认的Session save path
  4.         
  5. 'SESSION_TYPE'=>'File',                        // 默认Session类型 支持 DB 和 File 
  6.         
  7. 'SESSION_EXPIRE'=>'300000',                // 默认Session有效期
  8.         
  9. 'SESSION_TABLE'=>'think_session',        // 数据库Session方式表名
  10.         
  11. 'SESSION_CALLBACK'=>'',                        // 反序列化对象的回调方法

其中SESSION_NAME 参数需要注意,如果需要在不同的项目之间不共享传递Session的值,请设置不同的值,否则请保留相同的默认值。
如 果设置了相同的SESSION_NAME的值,但是又希望创建基于项目的私有Session空间,应该怎么处理呢?ThinkPHP还支持以项目为 Session空间的私有Session操作,以之前的常用操作为例,我们更改如下:

代码:
  1. // 检测Session变量是否存在(当前项目有效)
  2. Session::is_setLocal('name');
  3.  
  4. // 给Session变 量赋值(当前项目有效)
  5.  
  6. Session::setLocal('name','value');
  7.  
  8. // 获取Session变量(当前 项目有效)
  9.  
  10. Session::getLocal('name');

这样,和全局的Session操作就不会冲突,可以用于一些特殊情况的需要。

ThinkPHP支持数据库方式的Session操 作,设置SESSION_TYPE的值为DB就可以了,如果使用数据库方式,还要确保设置好SESSION_TABLE的值,并且导入下面的DDL到你的 数据库(以MySQL为例子):

代码:
  1. CREATE TABLE `think_session` (
  2.   `
  3. id` int(11) unsigned NOT NULL auto_increment,
  4.   `
  5. session_id` varchar(255) NOT NULL,
  6.   `
  7. session_expires` int(11) NOT NULL,
  8.   `
  9. session_data` blob,
  10.   
  11. PRIMARY KEY  (`id`)        
  12. )

注意,Db Session方式的数据库连接会采用项目的数据库配置信息进行连接。除了数据库方式外,还可以增加其它方式的Session保存机制,例如内存方式、 Memcache方式等,我们只要增加相应的过滤器就行了,使用session_set_save_handler 方法,具体的方法定义参考Think.Util.Filter下面的FilterSessionDb.class.php 文件的实现。

 

制作了一个简单的登陆判断

登陆检测之后赋予Session值,使Session的值为非空即为假的false

$_SESSION[C('USER_AUTH_KEY')] = $logInFind['id'] ;
其中 [C('USER_AUTH_KEY')]为ThinkPHP的内置方法和函数类。在未配置config.php文件时默认为空
把$logInFind['id'] 取出的帐号值赋予它,默认为关闭页面Session就自动删除消失!

其它页面使用下面格式判断
if(!isset($_SESSION[C('USER_AUTH_KEY')])) {  //isset 是检测变量是否赋值!
     $this->redirect('Login','Login'); //转到注册页面
    }

作者: Sjolzy

--EOF--

引用地址:

相关评论:

  1. gravatar face
    竹内里绪 4 月 20 日 对 “thinkphp关于session的使用总结” 发表最新评论。
    找点东西竟然很亲切的看到了我们公司的广告~~

    找点东西竟然很亲切的看到了我们公司的广告~~

      评分:5

  2. 2
    竹内里绪 :

    找点东西竟然很亲切的看到了我们公司的广告~~

    博主2012-04-22 21:45回复:哈哈,那你点了没。。
  3. 1
    dasriy :

    ThinkPHP技术交流群,群号197184631,或者百度群,ThinkPHP百度群号1390606,如果有疑问,可以和群内的高手们请教,一个技术交流平台,我们愿意帮助热爱程序的人。

发表评论:

  给 “thinkphp关于session的使用总结” 评分

广告、无意义的评论必删!