1. 程式人生 > >ThinkPHP的Session操作

ThinkPHP的Session操作

概述 ]
ThinkPHP對Session操作進行了封裝,並且無需引入就可以使用,Session的啟動會在應用初始化的時候自動執行,所以無需手動使用Session::start() 來啟動Session。
使用Session類操作和普通方式呼叫$_SESSION來操作並沒有本質不同,只是Session類很多引數可以根據專案配置來靈活設定。

方法 ]
Session類封裝了很多的靜態操作方法,常用方法包括包括:
start 啟動session
pause 暫停session
clear 清除session
destroy 銷燬session
get 獲取session值
getLocal 獲取私有session值
set 設定session值
setLocal 設定私有session值
name 獲取或者設定session_name
is_set 是否設定session值
is_setLocal 是否設定私有session值
id 獲取或者設定session_id
path 獲取或者設定session_save_path
setExpire 設定session過期時間
setCookieDomain 設定有效域名
setCallback 設定Session 物件反序列化時候的回撥函式

示例 ]
最常用的操作方法示例:

PHP程式碼
  1. // 檢測Session變數是否存在   
  2. Session::is_set('name');   
  3. // 給Session變數賦值   
  4. Session::set('name','value');   
  5. // 獲取Session變數   
  6. Session::get('name');  

配置 ]
和Session相關的配置引數:

PHP程式碼
  1. 'SESSION_NAME'=>'ThinkID',                // 預設Session_name   
  2. 'SESSION_PATH'=>'',                        // 採用預設的Session save path   
  3. 'SESSION_TYPE'=>'File',                        // 預設Session型別 支援 DB 和 File   
  4. 'SESSION_EXPIRE'=>'300000',                // 預設Session有效期   
  5. 'SESSION_TABLE'=>'think_session',        // 資料庫Session方式表名   
  6. 'SESSION_CALLBACK'=>'',                        // 反序列化物件的回撥方法其中  

SESSION_NAME 引數需要注意,如果需要在不同的專案之間不共享傳遞Session的值,請設定不同的值,否則請保留相同的預設值。
如果設定了相同的SESSION_NAME的值,但是又希望建立基於專案的私有Session空間,應該怎麼處理呢?ThinkPHP還支援以專案為Session空間的私有Session操作,以之前的常用操作為例,我們更改如下:

PHP程式碼
  1. // 檢測Session變數是否存在(當前專案有效)   
  2. Session::is_setLocal('name');   
  3. // 給Session變數賦值(當前專案有效)   
  4. Session::setLocal('name','value');   
  5. // 獲取Session變數(當前專案有效)   
  6. Session::getLocal('name');  

這樣,和全域性的Session操作就不會衝突,可以用於一些特殊情況的需要。

ThinkPHP支援資料庫方式的Session操作,設定SESSION_TYPE的值為DB就可以了,如果使用資料庫方式,還要確保設定好SESSION_TABLE的值,並且匯入下面的DDL到你的資料庫(以MySQL為例子):
程式碼: 複製內容到剪貼簿

SQL程式碼
  1. CREATE TABLE `think_session` (   
  2.    `id` int(11) unsigned NOT NULL auto_increment,   
  3.    `session_id` varchar(255) NOT NULL,   
  4.    `session_expires` int(11) NOT NULL,   
  5.    `session_data` blob,   
  6.   PRIMARY KEY   (`id`)           
  7. )  

注意,Db Session方式的資料庫連線會採用專案的資料庫配置資訊進行連線。除了資料庫方式外,還可以增加其它方式的Session儲存機制,例如記憶體方式、 Memcache方式等,我們只要增加相應的過濾器就行了,使用session_set_save_handler方法,具體的方法定義參考 Think.Util.Filter下面的FilterSessionDb.class.php 檔案的實現。