网页会话即是实现页面跳转及数据传递,在web开发中,Cookie和Session的使用是极其重要的,GET和POST是最常使用的页面间数据传递的方法,相对于PHP脚本基础,在ThinkPHP中对网页会话都进行了上层封装。
脚本的会话基础:PHP的会话控制
页面跳转:
在控制器或模板中要做页面跳转时使用
1 exit(header("Location: ../控制器/方法"));
超链接:
在视图的HTML里如果要超链接到本地的控制器则需要使用
1 href="{:url('控制器/方法')}"
JS传递参数:
利用其传递GET数据到后台,实现数据交互
1 window.location.href="../控制器/方法?u_id="+u_id+"&u_state=停用";
GET和POST的数据获取:
1 <?php 2 namespace app\index\controller; 3 4 use think\Request; 5 6 class Xiao 7 { 8 public function xiao2(){ 9 10 //获取到访问信息 11 $re=Request::instance(); 12 13 echo "当前域名:".$re->domain(); 14 15 echo "获取 GET 或者 POST 参数值:".$re->param("name");//也可以为input("name"); 16 dump(input());//$也可以为:re->param() 打印所有获取的值 17 18 $methodx=$re->method(); 19 echo "当前的请求方法:".$methodx; 20 21 //获取get数据 22 if($methodx=="GET"){ 23 echo $re->get("getn")."<br/>"; 24 dump($re->get()); 25 } 26 27 //获取post数据 28 if($methodx=="POST"){ 29 echo $re->post("postn")."<br/>"; 30 dump($re->post()); 31 32 } 33 34 } 35 36 }
Session的基本使用:
1 <?php 2 namespace app\index\controller; 3 4 //导入必要的模块 5 use think\Session; 6 7 class Xiao 8 { 9 public function xiao2(){ 10 //设置值 11 Session::set('name1','thinkphp'); 12 13 //判断session值是否存在 14 if(Session::has("name1")){ 15 echo "--------------------------"; 16 } 17 18 //获取某个值 19 echo Session::get('name1'); 20 21 //删除某个值 22 //Session::delete('name1'); 23 //清空所有 24 Session::clear(); 25 26 //session数组的设置 27 Session::set("n2.nn1","aa1"); 28 Session::set("n2.nn2","aa2"); 29 //获取某个值 30 echo Session::get("n2.nn1"); 31 //打印数组中所有值 32 dump(Session::get("n2")); 33 34 } 35 36 }
Cookie的基本使用:
1 <?php 2 namespace app\index\controller; 3 4 //导入必要的模块 5 use think\Cookie; 6 7 class Xiao 8 { 9 public function xiao2(){ 10 11 //cookie单值,时间单位为秒 12 Cookie::set('name1','value',3600); 13 //cookie数组 14 Cookie::set('name',[1,2,3]); 15 //判断是否存在 16 if(Cookie::has("name")){ 17 //打印出数组 18 dump(Cookie::get("name")); 19 } 20 //删除某个 21 Cookie::delete('name'); 22 //清空所有 23 Cookie::clear(); 24 } 25 26 }
利用Session的登入判断:
Session的值是保存在WEB服务器中的,利用其来做当次的登入判断是常用的一种方式,首先应该在用户名密码匹配成功后进行Session的写操作,接下来是验证Session内容,进行登入判断。
本来觉得验证写在控制器中就好了,结果发现一旦程序庞大后每个控制器中的方法就多了,因为每个方法就代表着一个入口,所以这是不可取的。如果把Session判断写在模板的构造函数中,因为模板表示这一个数据库的数据表且基本上控制器中的方法都会设计到数据表的操作,这样整体下来很好的实现了登入验证功能。
先导入必要模块:
1 use think\Session;
模板的构造函数编写:
1 //构造函数 2 function 类名(){ 3 4 //判断session 5 if(!Session::get("username")){ 6 7 //非登入,跳转页面 8 exit(header("Location: ../控制器/登入的方法名")); 9 10 } 11 12 }
注意:
构造函数需要与类同名,经过测试发现PHP自带的万能类构造方法__construct()是不能使用的