COOKIE SESSION 与初识命名空间
COOKIE
- cookie 适用于处理我们需要长久保存数据的功能,且该数据在不同页面都可以加载出来
- 使用 cookie 功能会用到$_COOKIE 超全局变量数组,它是服务器对用户访问的跟踪手段
- 但是,$_COOKIE 直接存入的变量无法在其他页面直接访问
- 设置 cookie 需要用到 setcookie()方法,setcookie 方法有两个参数,第一个是下标,第二个是值
- setcookie()方法第一次运行是在 Set-Cookie 中存储数据,第二次运行 Cookie 才能获取数据(即页面需要刷新)
- cookie 需要注意,得是在同一域名下的页面,才能访问到
- cookie 可以重复设置下标的值,已达到覆盖的效果
- setcookie 还有第三个参数,即设定过期时间,具体为当前时间戳 time()+要存放的时间(秒)
- cookie 下标与值的删除:cookie 的删除有两种方法,第一种是设置要存放的时间为负数,即可删除,第二种是给 cookie 的变量重新赋一个空值,也可以做到删除的效果
- setcookie 除设置下标跟值意外,还可以设置一个数组
- setcookie 设置数组后,数组里信息的删除,需要逐个删除
// 设置cookie,一小时后过期
setcookie('uname','admin',time()+3600);
//重新给cookie赋值
setcookie('uname','admin666',time()+3600);
// 删除cookie
setcookie('uname','admin',time()-1);
setcookie('uname',null);
// 或
setcookie('uname');
//设置cookie为数组
setcookie('info[name]','admin');
setcookie('info[gender]','male');
setcookie('info[age]','18');
// 销毁整个数组的缓存
if(!empty($_COOKIE['info'])){
foreach($_COOKIE['info']as$key=>$value){
setcookie("info[{$key}]");
}
}else{
echo '该缓存不存在';
}
echo '<pre>';
print_r($_COOKIE);
SESSION
- 除了 cookie,我们还可以使用 session 来保存数据,session 与 cookie 的不同之处在于 cookie 是存在浏览器中的,session 是存在我们的服务器上的
- 与 cookie 类似,session 也有一个超全局变量数组$_SESSION
- session 使用之前需要使用 session_start()来开启一个 session 会话
- session 的设置是直接用$_SESSION[\’下标\’]=\’值\’;的方式来添加跟修改的
- session 的单个删除有 unset()
- session 的全部删除有 session_unset();跟 session_destroy();两种,前者只会清空 session 的内容,但是之前创建的 session 文件还会保留下来,后面的 session_destroy()是可以直接销毁 session 文件的
- 每个用户生成的 session 文件都有一个 id,这个 id 与文件名里的 id 一致,可以使用 session_id()获取
session_start();
// $_SESSION['uname'] = 'admin';
// $_SESSION['gender'] = 'male';
// $_SESSION['age'] = 18;
// $_SESSION['id'] = 1;
echo '<pre>';
print_r($_SESSION);
echo '<hr>';
//获取session文件id
echo session_id();
// 删除单个下标
unset($_SESSION['id']);
//清空session文件内容
session_unset();
//删除session文件
session_destroy();
命名空间
- 命名空间是用来解决命名冲突的问题,比如相同变量名的两个变量的值会被覆盖,函数的函数名不能重名,使用命名空间就能很好的解决这两个问题。
- 命名空间使用 namespace 关键字来声明
- 命名空间的声明必须在除严谨函数 declare 外正式代码第一行(注释不算)
- 命名空间的规范也是一个文件一个命名空间
- 命名空间的声明方法一般有两种,一个是 namespace 空间名;另一种是 namespace 空间名{}
- 两种命名空间的声明方法只能同时用一种,不能两种混用
- 命名空间的使用采用了目录结构的方式
- 在本命名空间使用其他命名空间的内容时,路径必须以\开头
- 子命名空间使用父命名空间名+\+子命名空间的方式来命名
// 声明one命名空间
namespace one;
function demo(){
return 'one\'s demo';
}
echo demo();
echo '<hr>';
// 声明two命名空间
namespace two;
function demo(){
return 'two\'s demo';
}
echo demo();
echo '<hr>';
echo \one\demo();
echo '<hr>';
echo '<hr>';
// 声明one命名空间的子命名空间one_1
namespace one\one_1;
function demo(){
return 'one_1\'s demo';
}
echo demo();
echo '<hr>';
echo \one\demo();
// 声明one命名空间
namespace one {
function demo()
{
return 'one\'s demo';
}
echo demo();
echo '<hr>';
}
// 声明two命名空间
namespace two {
function demo()
{
return 'two\'s demo';
}
echo demo();
echo '<hr>';
}
//什么都不加默认是根空间
namespace {
echo \one\demo();
echo '<hr>';
echo \two\demo();
}