ThinkPHP中Session用法詳解

在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 函數,官方亦是如此建議.

相關文章
相關標籤/搜索