裡面有兩種session的使用方法:
1是php的原始的session使用方法,這個很簡單,$_SESSION['name']="name",然後在需要的地方顯示:echo $_SESSION['name'];
2是codeigniter這個架構的一個方法:
下面就詳細講解如何使用這個有點點複雜的方法:
首先,在\ci\application\config下面的config.php檔案中找到:$config['encryption_key'] = '';這個裡面隨便填什麼值都可以,但是不可為空。一般是英文啊,不要鑽牛角尖。
接著在\ci\application\config下面的auto.php檔案中找到:$autoload['libraries'] = array('');裡面要填寫:$autoload['libraries'] = array('session');或者在適當的地方如control檔案夾裡面的相應檔案中(一般是在構造方法中)寫:$this->load->library('session');這樣也行。
現在環境配置好了,現在就是寫代碼了:
在需要放入session的地方寫:
$this->session->set_userdata('name','yang');
這樣session裡面就有了值了。
顯示值:
echo $this->session->userdata('name');
如果是array,則:
$newdata = array(
'username' => 'johndoe',
'email' => 'johndoe@some-site.com',
'logged_in' => TRUE
);
$this->session->set_userdata($newdata);
以下是轉載的別人的詳細的有點廢話的相關知識:
Sessions會在每個頁面載入後開始運行,所以session類必須首先被初始化。
1、您可以在控制器中初始化,也可以在系統中自動載入(譯者註:在autoload.php設定)$autoload['libraries'] = array('session');
2、要在您的控制器建構函式中初始化session類,您可以使用 $this->load->library 函數:$this->load->library('session');一旦被載入, session就可以這樣使用: $this->session。
session類的絕大部分都會在後台運行,所以初始化session時,它session資料會被自動讀取、建立和更新。
Sessions 是怎樣工作的?
需要知道的非常重要的一點就是,session類一旦被初始化,它就會自動運行。對於後面的事情,您可以完全不作理會。正如您將會在下面看到的一樣,您可以正常使用session來工作,甚至還可以添加自己的session資料,而在這一切的過程中,讀、寫和更新的操作都是自動完成的。
當頁面載入後,session類就會檢查使用者的cookie中是否存在有效session資料。如果session資料不存在(或者已經到期),那麼就會建立一個新的session並把他儲存在cookie中。如果session資料存在,那麼他的資訊就會被更新,同時cookie也會被同時更新。每次更新都會重建session_id的值。
預設情況下, Session Cookie 每隔 5 分鐘才會更新一次,這樣會減少對處理器的負荷。如果你重複的裝載頁面, 你會發現"上次活動"的時間在五分鐘,或多餘五分鐘的時候才會變化,也就是 cookie上次被寫入的時間。 這個時間可以通過設定 application/config/config.php 檔案裡的 $config['sess_time_to_update'] 行來改變。
一個 session 是由一個包括下列資訊的數組組成的:
唯一的使用者Session ID (這是一個平均資訊量統計出來的非常堅固的隨機字串,使用MD5加密,預設是每五分鐘就重建一次。
使用者的 IP 位址
使用者瀏覽器資訊(取前50個字元)
最新的一個活躍時間戳記.
以上資料將會用以下數組格式序列化並存到cookie裡:
複製代碼 代碼如下:[array]
(
'session_id' => random hash,
'ip_address' => 'string - user IP address',
'user_agent' => 'string - user agent data',
'last_activity' => timestamp
)
1、取得 Session 資料:
可以通過如下的函數來得到 session 數組的任何資訊:
$this->session->userdata('item');
item 是數組裡的相對應資料的索引。例如,想要獲得 session ID, 你要使用如下的代碼:
$session_id = $this->session->userdata('session_id');
注意: 如果你的目標資料不存在的話,這個函數會返回 FALSE (布爾值boolean)。
2、添加自訂的 Session 資料:
假設,有個特定使用者登陸到你的網站, 當他通過檢測後 你可以添加他的使用者名稱和電子郵件到 session cookie 中,這些資訊可以在不去訪問資料庫的情況下,當成全域量來使用。
通過以下函數,你可以傳遞一個新的使用者數組到 session 數組中:
$this->session->set_userdata($array);
$array 是一個結合數組,用來儲存你的新資料。例如 :
複製代碼 代碼如下:$newdata = array(
'username' => 'johndoe',
'email' => 'johndoe@some-site.com',
'logged_in' => TRUE
);
$this->session->set_userdata($newdata);
如果使用下面 set_userdata()函數的寫法,可以每次只添加一個使用者資料。
$this->session->set_userdata('some_name', 'some_value');
注意: Cookies 只能儲存 4KB 的資料, 使用時要小心超出它的容量。特別指出的是,加密會產生比原資料更長的資料字串,所以一定要當心你要存放資料的大小。
3、刪除 Session 資料:正如使用 set_userdata() 是用來添加資訊到 session 中,而通過向unset_userdata() 函數中傳遞 session key 可以用來刪除這些資訊。例如, 你想要從 session 資訊裡去掉 'some_name':
$this->session->unset_userdata('some_name');
也可以給這個函數傳一個要刪除項的關聯陣列。
$array_items = array('username' => '', 'email' => '');
$this->session->unset_userdata($array_items);
4、將 Session 資料存入資料庫:
當session 資料在資料庫中可用時,每當從使用者cookie中發現一個有效session,一個資料庫查詢就會被執行以匹配它。如果 session ID 不相配,session 就會被銷毀。Session ID永遠不會更新,它們只會在一個新的會話建立時產生。
為了儲存session,你必須先建立一個資料表。這是 session 類所需的基本結構(用於MySQL的):
複製代碼 代碼如下:CREATE TABLE IF NOT EXISTS `ci_sessions` (
session_id varchar(40) DEFAULT '0' NOT NULL,
ip_address varchar(16) DEFAULT '0' NOT NULL,
user_agent varchar(50) NOT NULL,
last_activity int(10) unsigned DEFAULT 0 NOT NULL,
user_data text DEFAULT '' NOT NULL,
PRIMARY KEY (session_id) );
一旦啟用了,Session類就會在資料庫中儲存session資料。
同時確保你已經在設定檔中指定了資料表名:$config['sess_table_name'] = 'ci_sessions';
注意: 預設情況下這個表叫做 ci_sessions, 但是你可以給它指定任意名字,只要你更新了 application/config/config.php 檔案以確保它包含了你所起的名字。一旦你建立了資料表,你就可以像下面這樣在config.php檔案中啟用資料庫選項:
$config['sess_use_database'] = TRUE;
注意: Session類已經內建了清除到期session的記憶體回收機制,因此你不需要編寫你自己的事務來做這個。
5、銷毀 Session
要清除當前 session:$this->session->sess_destroy();
Session 的參數
6、你可以在application/config/config.php 檔案中找到以下的 Session 相關的參數:
參數 預設 選項 描述
sess_cookie_name ci_session 無 你想要儲存 Session Cookie 的名字。
sess_expiration 7200 無 session 持續的秒數。預設是2個小時(7200秒)。如果將這個數值設為: 0,就可以得到 永久 session。
sess_expire_on_close FALSE TRUE/FALSE (boolean) 這個選項決定當瀏覽器視窗關閉時是否自動使session到期。
sess_encrypt_cookie FALSE TRUE/FALSE (布爾值boolean) 是否對 session 資料加密.
sess_use_database FALSE TRUE/FALSE (布爾值boolean) 是否將 session 資料存放入資料庫中。在開啟這個選項前,你要先建立一個資料庫表。
sess_table_name ci_sessions 任何有效 SQL 表名 session 資料庫表的名字。
sess_time_to_update 300 時間以秒計算 這個選項控制 session 類多久會產生一個新的session 和 session id。
sess_match_ip FALSE TRUE/FALSE (布爾值boolean) 是否通過使用者的IP地址來讀取 session 的資料。 注意 ,有些網路運行商 ISPs 會動態改變IP, 所以將這個選項設為 FALSE, 才有可能得到永久的 session。
sess_match_useragent TRUE TRUE/FALSE (布爾值boolean) 是否要按照對應的 User Agent 來讀取 session 資料。