在ThinkPHP封裝了Session類,用戶能夠直接使用,經常使用的方法有:html
Session::set(name, value):註冊 session 。數組
Session::is_set(name):檢查Session的值是否設置。服務器
Session::get(name):讀取 session 。session
Session::clear():清空Session。函數
Session::destroy():銷燬 session 。post
ThinkPHP 默認開啓了 session 會話,所以在使用 Session 類以前不須要使用 session_start() 函數來開啓會話.this
使用 session 實例spa
下面以表單提交的方式註冊 session,並在其餘兩個頁面分別以模板方式和操做中以 Session::get 方式讀出 session 值.code
註冊 sessionorm
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 函數,官方亦是如此建議.