在我們學習PHP基礎的時候都會遇到session會話控制,我當時學的時候就是弄不明白,後來在開發中才搞懂,原來這麼簡單,可能理解的層面還是太淺,今天我們就來講講session在thinkPHP框架中的使用方法吧!
在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 函數,官方亦是如此建議.
你也該看看這些:
以上是session如何在thinkphp中使用講解的詳細內容。更多資訊請關注PHP中文網其他相關文章!