首頁  >  文章  >  後端開發  >  session如何在thinkphp中使用講解

session如何在thinkphp中使用講解

韦小宝
韦小宝原創
2018-03-06 13:00:411807瀏覽

在我們學習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[&#39;username&#39;]">{$_SESSION[&#39;username&#39;]} 你好!  
< 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(&#39;username&#39;)){  
echo Session::get(&#39;username&#39;).&#39; 你好&#39;;  
}else{  
echo &#39;session 未注册&#39;;  
}  
}

其他模組頁面

在其他頁面(如Index/index)裡,判斷並讀取session 的程式碼片段:

<present name="_SESSION[&#39;username&#39;]">
{$_SESSION[&#39;username&#39;]} 你好!
<else />未登录
</present>

session 无效(无法传递)

ThinkPHP 中可能出現session無效(無法傳遞至其他頁面)的情況,可能的原因如下:

使用Session 類別頭字母未大寫,如:session::set.

頁面有訊息輸出,如入口檔案有空行等.

伺服器上(Linux/Unix)的session 儲存路徑(session.save_path)權限不正確導致無法將session 資訊正確儲存.

作用域問題建議:

ThinkPHP 的Session 類別只是對session 做了簡單的包裝,實際上可以在操作中直接使用PHP 原生的session 函數,官方亦是如此建議.

你也該看看這些:

php會話控制session、cookie介紹

詳解Laravel中Sessionid的處理機制

以上是session如何在thinkphp中使用講解的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn