解析php框架codeigniter中如何使用框架的session
里面有兩種session的使用方法:
1是php的原始的session使用方法,這個(gè)很簡(jiǎn)單,$_SESSION['name']="name",然后在需要的地方顯示:echo $_SESSION['name'];
2是codeigniter這個(gè)框架的一個(gè)方法:
下面就詳細(xì)講解如何使用這個(gè)有點(diǎn)點(diǎn)復(fù)雜的方法:
首先,在\ci\application\config下面的config.php文件中找到:$config['encryption_key'] = '';這個(gè)里面隨便填什么值都可以,但是不能為空。一般是英文啊,不要鉆牛角尖。
接著在\ci\application\config下面的auto.php文件中找到:$autoload['libraries'] = array('');里面要填寫(xiě):$autoload['libraries'] = array('session');或者在適當(dāng)?shù)牡胤饺鏲ontrol文件夾里面的相應(yīng)文件中(一般是在構(gòu)造方法中)寫(xiě):$this->load->library('session');這樣也行。
現(xiàn)在環(huán)境配置好了,現(xiàn)在就是寫(xiě)代碼了:
在需要放入session的地方寫(xiě):
$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);
以下是轉(zhuǎn)載的別人的詳細(xì)的有點(diǎn)廢話(huà)的相關(guān)知識(shí):
Sessions會(huì)在每個(gè)頁(yè)面載入后開(kāi)始運(yùn)行,所以session類(lèi)必須首先被初始化。
1、您可以在控制器中初始化,也可以在系統(tǒng)中自動(dòng)加載(譯者注:在autoload.php設(shè)定)$autoload['libraries'] = array('session');
2、要在您的控制器構(gòu)造函數(shù)中初始化session類(lèi),您可以使用 $this->load->library 函數(shù):$this->load->library('session');一旦被載入, session就可以這樣使用: $this->session。
session類(lèi)的絕大部分都會(huì)在后臺(tái)運(yùn)行,所以初始化session時(shí),它session數(shù)據(jù)會(huì)被自動(dòng)讀取、創(chuàng)建和更新。
Sessions 是怎樣工作的?
需要知道的非常重要的一點(diǎn)就是,session類(lèi)一旦被初始化,它就會(huì)自動(dòng)運(yùn)行。對(duì)于后面的事情,您可以完全不作理會(huì)。正如您將會(huì)在下面看到的一樣,您可以正常使用session來(lái)工作,甚至還可以添加自己的session數(shù)據(jù),而在這一切的過(guò)程中,讀、寫(xiě)和更新的操作都是自動(dòng)完成的。
當(dāng)頁(yè)面載入后,session類(lèi)就會(huì)檢查用戶(hù)的cookie中是否存在有效的session數(shù)據(jù)。如果session數(shù)據(jù)不存在(或者已經(jīng)過(guò)期),那么就會(huì)創(chuàng)建一個(gè)新的session并把他保存在cookie中。如果session數(shù)據(jù)存在,那么他的信息就會(huì)被更新,同時(shí)cookie也會(huì)被同時(shí)更新。每次更新都會(huì)重新生成session_id的值。
默認(rèn)情況下, Session Cookie 每隔 5 分鐘才會(huì)更新一次,這樣會(huì)減少對(duì)處理器的負(fù)荷。如果你重復(fù)的裝載頁(yè)面, 你會(huì)發(fā)現(xiàn)"上次活動(dòng)"的時(shí)間在五分鐘,或多余五分鐘的時(shí)候才會(huì)變化,也就是 cookie上次被寫(xiě)入的時(shí)間。 這個(gè)時(shí)間可以通過(guò)設(shè)置 application/config/config.php 文件里的 $config['sess_time_to_update'] 行來(lái)改變。
一個(gè) session 是由一個(gè)包括下列信息的數(shù)組組成的:
唯一的用戶(hù)Session ID (這是一個(gè)平均信息量統(tǒng)計(jì)出來(lái)的非常堅(jiān)固的隨機(jī)字符串,使用MD5加密,默認(rèn)是每五分鐘就重新生成一次。
用戶(hù)的 IP 地址
用戶(hù)瀏覽器信息(取前50個(gè)字符)
最新的一個(gè)活躍時(shí)間戳.
以上數(shù)據(jù)將會(huì)用以下數(shù)組格式序列化并存到cookie里:
[array]
(
'session_id' => random hash,
'ip_address' => 'string - user IP address',
'user_agent' => 'string - user agent data',
'last_activity' => timestamp
)
1、取得 Session 數(shù)據(jù):
可以通過(guò)如下的函數(shù)來(lái)得到 session 數(shù)組的任何信息:
$this->session->userdata('item');
item 是數(shù)組里的相對(duì)應(yīng)數(shù)據(jù)的索引。例如,想要獲得 session ID, 你要使用如下的代碼:
$session_id = $this->session->userdata('session_id');
注意: 如果你的目標(biāo)數(shù)據(jù)不存在的話(huà),這個(gè)函數(shù)會(huì)返回 FALSE (布爾值boolean)。
2、添加自定義的 Session 數(shù)據(jù):
假設(shè),有個(gè)特定用戶(hù)登陸到你的網(wǎng)站, 當(dāng)他通過(guò)檢測(cè)后 你可以添加他的用戶(hù)名和電子郵件到 session cookie 中,這些信息可以在不去訪問(wèn)數(shù)據(jù)庫(kù)的情況下,當(dāng)成全局量來(lái)使用。
通過(guò)以下函數(shù),你可以傳遞一個(gè)新的用戶(hù)數(shù)組到 session 數(shù)組中:
$this->session->set_userdata($array);
$array 是一個(gè)結(jié)合數(shù)組,用來(lái)存儲(chǔ)你的新數(shù)據(jù)。例如 :
$newdata = array(
'username' => 'johndoe',
'email' => 'johndoe@some-site.com',
'logged_in' => TRUE
);
$this->session->set_userdata($newdata);
如果使用下面 set_userdata()函數(shù)的寫(xiě)法,可以每次只添加一個(gè)用戶(hù)數(shù)據(jù)。
$this->session->set_userdata('some_name', 'some_value');
注意: Cookies 只能存儲(chǔ) 4KB 的數(shù)據(jù), 使用時(shí)要小心超出它的容量。特別指出的是,加密會(huì)產(chǎn)生比原數(shù)據(jù)更長(zhǎng)的數(shù)據(jù)字符串,所以一定要當(dāng)心你要存放數(shù)據(jù)的大小。
3、刪除 Session 數(shù)據(jù):正如使用 set_userdata() 是用來(lái)添加信息到 session 中,而通過(guò)向unset_userdata() 函數(shù)中傳遞 session key 可以用來(lái)刪除這些信息。例如, 你想要從 session 信息里去掉 'some_name':
$this->session->unset_userdata('some_name');
也可以給這個(gè)函數(shù)傳一個(gè)要?jiǎng)h除項(xiàng)的關(guān)聯(lián)數(shù)組。
$array_items = array('username' => '', 'email' => '');
$this->session->unset_userdata($array_items);
4、將 Session 數(shù)據(jù)存入數(shù)據(jù)庫(kù):
當(dāng)session 數(shù)據(jù)在數(shù)據(jù)庫(kù)中可用時(shí),每當(dāng)從用戶(hù)cookie中發(fā)現(xiàn)一個(gè)有效的session,一個(gè)數(shù)據(jù)庫(kù)查詢(xún)就會(huì)被執(zhí)行以匹配它。如果 session ID 不相配,session 就會(huì)被銷(xiāo)毀。Session ID永遠(yuǎn)不會(huì)更新,它們只會(huì)在一個(gè)新的會(huì)話(huà)創(chuàng)建時(shí)生成。
為了存儲(chǔ)session,你必須先創(chuàng)建一個(gè)數(shù)據(jù)表。這是 session 類(lèi)所需的基本結(jié)構(gòu)(用于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類(lèi)就會(huì)在數(shù)據(jù)庫(kù)中存儲(chǔ)session數(shù)據(jù)。
同時(shí)確保你已經(jīng)在配置文件中指定了數(shù)據(jù)表名:$config['sess_table_name'] = 'ci_sessions';
注意: 默認(rèn)情況下這個(gè)表叫做 ci_sessions, 但是你可以給它指定任意名字,只要你更新了 application/config/config.php 文件以確保它包含了你所起的名字。一旦你創(chuàng)建了數(shù)據(jù)表,你就可以像下面這樣在config.php文件中啟用數(shù)據(jù)庫(kù)選項(xiàng):
$config['sess_use_database'] = TRUE;
注意: Session類(lèi)已經(jīng)內(nèi)置了清除過(guò)期session的垃圾回收機(jī)制,因此你不需要編寫(xiě)你自己的事務(wù)來(lái)做這個(gè)。
5、銷(xiāo)毀 Session
要清除當(dāng)前 session:$this->session->sess_destroy();
Session 的參數(shù)
6、你可以在application/config/config.php 文件中找到以下的 Session 相關(guān)的參數(shù):
參數(shù) 默認(rèn) 選項(xiàng) 描述
sess_cookie_name ci_session 無(wú) 你想要保存 Session Cookie 的名字。
sess_expiration 7200 無(wú) session 持續(xù)的秒數(shù)。默認(rèn)是2個(gè)小時(shí)(7200秒)。如果將這個(gè)數(shù)值設(shè)為: 0,就可以得到 永久 session。
sess_expire_on_close FALSE TRUE/FALSE (boolean) 這個(gè)選項(xiàng)決定當(dāng)瀏覽器窗口關(guān)閉時(shí)是否自動(dòng)使session過(guò)期。
sess_encrypt_cookie FALSE TRUE/FALSE (布爾值boolean) 是否對(duì) session 數(shù)據(jù)加密.
sess_use_database FALSE TRUE/FALSE (布爾值boolean) 是否將 session 數(shù)據(jù)存放入數(shù)據(jù)庫(kù)中。在開(kāi)啟這個(gè)選項(xiàng)前,你要先創(chuàng)建一個(gè)數(shù)據(jù)庫(kù)表。
sess_table_name ci_sessions 任何有效的 SQL 表名 session 數(shù)據(jù)庫(kù)表的名字。
sess_time_to_update 300 時(shí)間以秒計(jì)算 這個(gè)選項(xiàng)控制 session 類(lèi)多久會(huì)產(chǎn)生一個(gè)新的session 和 session id。
sess_match_ip FALSE TRUE/FALSE (布爾值boolean) 是否通過(guò)用戶(hù)的IP地址來(lái)讀取 session 的數(shù)據(jù)。 注意 ,有些網(wǎng)絡(luò)運(yùn)行商 ISPs 會(huì)動(dòng)態(tài)的改變IP, 所以將這個(gè)選項(xiàng)設(shè)為 FALSE, 才有可能得到永久的 session。
sess_match_useragent TRUE TRUE/FALSE (布爾值boolean) 是否要按照對(duì)應(yīng)的 User Agent 來(lái)讀取 session 數(shù)據(jù)。
相關(guān)文章
PHP簡(jiǎn)單開(kāi)啟curl的方法(測(cè)試可行)
這篇文章主要介紹了PHP簡(jiǎn)單開(kāi)啟curl的方法,較為詳細(xì)的講述了PHP開(kāi)啟curl函數(shù)庫(kù)的具體步驟與相關(guān)注意事項(xiàng),需要的朋友可以參考下2016-01-01php通過(guò)strpos查找字符串出現(xiàn)位置的方法
這篇文章主要介紹了php通過(guò)strpos查找字符串出現(xiàn)位置的方法,實(shí)例分析了strpos的功能及使用技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下2015-03-03PHP7.0連接DB操作實(shí)例分析【基于mysqli】
這篇文章主要介紹了PHP7.0連接DB操作,結(jié)合實(shí)例形式分析了php7基于mysqli連接與查詢(xún)數(shù)據(jù)庫(kù)相關(guān)操作技巧,需要的朋友可以參考下2019-09-09PHP腳本監(jiān)控Nginx 502錯(cuò)誤并自動(dòng)重啟php-fpm
這篇文章主要介紹了PHP腳本監(jiān)控Nginx 502錯(cuò)誤并自動(dòng)重啟php-fpm,本文直接給出實(shí)現(xiàn)代碼,然后放到cron中執(zhí)行,需要的朋友可以參考下2015-05-05PHP獲取文件擴(kuò)展名的方法實(shí)例總結(jié)
這篇文章主要介紹了PHP獲取文件擴(kuò)展名的方法,結(jié)合實(shí)例形式總結(jié)了6種常用的文件擴(kuò)展名獲取方法,代碼備有較為詳細(xì)的注釋便于理解,需要的朋友可以參考下2017-06-06php中長(zhǎng)文章分頁(yè)顯示實(shí)現(xiàn)代碼
php中長(zhǎng)文章分頁(yè)顯示實(shí)現(xiàn)代碼,需要的朋友可以參考下2012-09-09php有序列表或數(shù)組中刪除指定的值的實(shí)現(xiàn)代碼
這篇文章主要介紹了php有序列表或數(shù)組中刪除指定的值的實(shí)現(xiàn)代碼,刪除給定的值之后,得到一個(gè)新的有序列表,長(zhǎng)度-1,下面是具體的實(shí)現(xiàn)方法2021-08-08