Session 与 Cookie
一.Session
系统提供了 Session 管理和操作的完善支持,只需要通过 session()函数完成,该函
数可以完成 Session 的设置、获取、删除和管理操作。(session是保存在服务器端)
一般来说,在 ThinkPHP 中不需要手动初始化 session,系统会自动初始化。
参数名 | 说明 |
id | session_id 值 |
name | session_name 值 |
path | session_save_path 值 |
prefix | session 本地化空间前缀 |
expire | session.gc_maxlifetime 设置值 |
domain | session.cookie_domain 设置值 |
use_cookies | session.use_cookies 设置值 |
use_trans_sid | session.use_trans_sid 设置值 |
type | session 处理类型,支持驱动扩展 |
1 //手工初始化 2 session( array('name'=>'session_id', 'expire'=>3600));
1 //配置SESSION初始化 2 SESSION_OPTIONS=> array( 3 'name'=>'session_id', 4 'expire'=>3600, 5 ),
默认情况下,初始化之后系统会自动启动 session,所以上面初始化的代码了解即可,如果不希望系统自动启动 session
的话,可以如下设置:
在 config.php 进行配置:
1 //设置系统不启用session 2 'SESSION_AUTO_START' => false,
在 WeiBo/Home/Controller/UserController.class.php 中对 session 进行使用:
//注释的是不用时ThinkPHP框架时使用session的格式
1 //session赋值 2 session('user', 'Mr.Lee'); //$_SESSION['user'] = 'Mr.Lee';
1 //获取session值 2 echo session('user'); //echo $_SESSION['user'];
1 //session删除 2 session('user', null); //unset($_SESSION['user']);
1 //删除所有session 2 session(null); //$_SESSION=array();
1 //判断session是否存在,存在则为1,不存在则为空,而不是0 2 echo session('?user'); //isset($_SESSION['user']);
1 //暂停session,写入关闭 2 session('[pause]'); //session_write_close();
1 //启动session,可开启写入 2 session('[start]'); //session_start()
1 //销毁session 2 session('[destroy]'); //session_destroy();
1 //重新生成session id,这时服务器端不会覆盖掉原来的session id 而是重新生成一个,这时再启用null和destroy都只是删除现在最新的session id,而不是之前的 2 session('[regenerate]'); //session_regenerate_id();
PS:如果在初始化 session 设置的时候传入 prefix 参数或者单独设置了
SESSION_PREFIX 参数的话,就可以启用本地化 session 管理支持。
1 //SESSION前缀 2 'SESSION_PREFIX'=>'think_',
这时处理的$_SESSION['user']将变成$_SESSION['think_']['user'],而我们在
处理上没有任何区别。
二.Cookie
ThinkPHP 内置了一个 cookie 函数用于支持和简化 Cookie 的相关操作,该函数可以完成
Cookie 的设置、获取、删除操作。(cookie是保存在客户端)
注释后面是不用ThinkPHP时的cookie的格式
1 //cookie赋值 2 cookie('user', 'Mr.Lee'); //setcookie('user', 'Mr.Lee');
1 //cookie取值 2 echo cookie('user'); //echo $_COOKIE['user'];
1 //cookie赋值,设置过期时间,以秒计时 2 cookie('user', 'Mr.Lee', 3600);
1 //cookie赋值,第三参数数组设置过期时间和前缀 2 cookie('user', 'Lee', array('expire'=>3600,'prefix'=>'think_')); 3 cookie('user', 'Mr.Lee', 'expire=3600&prefix=think_');
1 //cookie取值,带前缀 2 echo cookie('think_user');
PS:除了过期和前缀,还有 path(保存路径)和 domain(域)。当然也支持配置文件的
写法:COOKIE_PREFIX、COOKIE_EXPIRE、COOKIE_PATH、COOKIE_DOMAIN。
1 //cookie赋值,数组 2 cookie('user',array('Mr.', 'Lee'));
1 //cookie删除user 2 cookie('user',null);
1 //cookie删除在配置文件里指定前缀的所有 2 cookie(null);
1 //cookie删除指定前缀的 2 cookie(null, 'think_');