ThinkPHP中Session用法详解
本文实例讲述了ThinkPHP中Session用法。分享给大家供大家参考。具体如下:
在ThinkPHP封装了Session类,用户可以直接使用,常用的方法有:
Session::set(name,value):注册session。
Session::is_set(name):检查Session的值是否设置。
Session::get(name):读取session。
Session::clear():清空Session。
Session::destroy():销毁session。
ThinkPHP默认开启了session会话,因此在使用Session类之前不需要使用session_start()函数来开启会话.
使用session实例
下面以表单提交的方式注册session,并在其他两个页面分别以模板方式和操作中以Session::get方式读出session值.
注册session
User模块sessionTest操作注册session例子:
classUserActionextendsAction{ publicfunctionsession(){ if(!emptyempty($_POST['username'])){ Session::set('username',$_POST['username']); } $this->display(); } }
sessionTest.html模板(片段):
<p> <presentname="_SESSION['username']">{$_SESSION['username']}你好! <ahref="__APP__/">首页</a> <ahref="__URL__/user">本模块其他页面</a> <ahref="__URL__/logout">注销</a><else/>请输入您的用户名: </p> <formaction="__SELF__"method="post"> <p><inputtype="text"name="username"/></p> <p><inputtype="submit"value="提交"/></p> </form> </present>
当填入用户名(如testuser),点击提交按钮后,提交至sessionTest方法(即当前页面)处理并注册session值,以模板标签present来控制输出逻辑,检测到已经注册$_SESSION['username']变量即输出:
testuser你好!首页注销
否则会输出表单。
检测session是否注册
模板里检测
在模板里面,可以直接使用present或notempty甚至switch等标签判断session变量是否注册,以决定输出对应的session值(直接以输出数组单元的方式输出session变量值)或显示其他页面元素,具体可参见本教程模板标签部分内容以及上面的例子.
操作里检测
在操作里,可以使用Session::is_set方法检查Session的值是否设置,例如User模块user操作如下:
publicfunctionuser(){ //由于直接在操作里输出,为避免乱码 header("Content-Type:text/html;charset=utf-8"); if(Session::is_set('username')){ echoSession::get('username').'你好'; }else{ echo'session未注册'; } }
其他模块页面
在其他页面(如Index/index)里,判断并读取session的代码片段:
<presentname="_SESSION['username']">{$_SESSION['username']}你好!<else/>未登录</present>
session无效(无法传递)
ThinkPHP中可能出现session无效(无法传递至其他页面)的情况,可能的原因如下:
使用Session类头字母未大写,如:session::set.
页面有信息输出,如入口文件有空行等.
服务器上(Linux/Unix)的session存储路径(session.save_path)权限不正确导致无法将session信息正确存储.
作用域问题建议:
ThinkPHP的Session类只是对session做了简单的包装,实际可以在操作中直接使用PHP原生的session函数,官方亦是如此建议.
希望本文所述对大家的ThinkPHP框架程序设计有所帮助。