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如何设置和读取
注册 session
User 模块 sessionTest 操作注册 session 例⼦:
复制代码代码如下:
class UserAction extends Action{
public function session(){
if(!emptyempty($_POST['username'])){
Session::set('username',$_POST['username']);
}
$this->display();
}
}
sessionTest.html 模板(⽚段):
复制代码代码如下:
<p>
< present name="_SESSION['username']">{$_SESSION['username']} 你好!
< a href="__APP__/">⾸页</a>
< a href="__URL__/user">本模块其他页⾯</a>
< a href="__URL__/logout">注销</a><else />请输⼊您的⽤户名:
< /p>
< form action="__SELF__" method="post">
< p><input type="text" name="username" /></p>
< p><input type="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 操作如下:
复制代码代码如下:
public function user(){
// 由于直接在操作⾥输出,为避免乱码
header("Content-Type:text/html; charset=utf-8");
if(Session::is_set('username')){
echo Session::get('username').' 你好';
}else{
echo 'session 未注册';
}
}
其他模块页⾯
在其他页⾯(如 Index/index)⾥,判断并读取 session 的代码⽚段:
复制代码代码如下:
<present name="_SESSION['username']">{$_SESSION['username']} 你好!<else />未登录</present>
session ⽆效(⽆法传递)
ThinkPHP 中可能出现 session ⽆效(⽆法传递⾄其他页⾯)的情况,可能的原因如下:
使⽤ Session 类头字母未⼤写,如:session::set.
页⾯有信息输出,如⼊⼝⽂件有空⾏等.
服务器上(Linux/Unix)的 session 存储路径(session.save_path)权限不正确导致⽆法将 session 信息正确存储.
作⽤域问题建议:
ThinkPHP 的 Session 类只是对 session 做了简单的包装,实际可以在操作中直接使⽤ PHP 原⽣的 session 函数,官⽅亦是如此建议.

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。