zoukankan      html  css  js  c++  java
  • 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 例子:

    复制代码 代码如下:
    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 函数,官方亦是如此建议.

  • 相关阅读:
    我爱java系列之---【微服务间的认证—Feign拦截器】
    我爱java系列之---【设置权限的三种解决方案】
    581. Shortest Unsorted Continuous Subarray
    129. Sum Root to Leaf Numbers
    513. Find Bottom Left Tree Value
    515. Find Largest Value in Each Tree Row
    155. Min Stack max stack Maxpop O(1) 操作
    painting house
    Minimum Adjustment Cost
    k Sum
  • 原文地址:https://www.cnblogs.com/sjxx/p/5518324.html
Copyright © 2011-2022 走看看