亚洲国产日韩欧美一区二区三区,精品亚洲国产成人av在线,国产99视频精品免视看7,99国产精品久久久久久久成人热,欧美日韩亚洲国产综合乱

direktori cari
歡迎 目錄 快速參考圖 基本信息 服務(wù)器要求 許可協(xié)議 變更記錄 關(guān)于CodeIgniter 安裝 下載 CodeIgniter 安裝指導(dǎo) 從老版本升級(jí) 疑難解答 介紹 開始 CodeIgniter 是什么? CodeIgniter 速記表 支持特性 應(yīng)用程序流程圖 模型-視圖-控制器 架構(gòu)目標(biāo) 教程 內(nèi)容提要 加載靜態(tài)內(nèi)容 創(chuàng)建新聞條目 讀取新聞條目 結(jié)束語(yǔ) 常規(guī)主題 CodeIgniter URL 控制器 保留字 視圖 模型 輔助函數(shù) 使用 CodeIgniter 類庫(kù) 創(chuàng)建你自己的類庫(kù) 使用 CodeIgniter 適配器 創(chuàng)建適配器 創(chuàng)建核心系統(tǒng)類 鉤子 - 擴(kuò)展框架的核心 自動(dòng)裝載資源 公共函數(shù) URI 路由 錯(cuò)誤處理 緩存 調(diào)試應(yīng)用程序 以CLI方式運(yùn)行 管理應(yīng)用程序 處理多環(huán)境 PHP替代語(yǔ)法 安全 開發(fā)規(guī)范 類庫(kù)參考 基準(zhǔn)測(cè)試類 日歷類 購(gòu)物車類 配置類 Email 類 加密類 文件上傳類 表單驗(yàn)證詳解 FTP 類 圖像處理類 輸入類 Javascript 類 語(yǔ)言類 裝載類 遷移類 輸出類 分頁(yè)類 模板解析器類 安全類 Session 類 HTML 表格類 引用通告類 排版類 單元測(cè)試類 URI 類 User-Agent 類 表單驗(yàn)證 XML-RPC 和 XML-RPC 服務(wù)器 Zip 編碼類 緩存適配器 適配器參考 適配器 數(shù)據(jù)庫(kù)類 Active Record 類 數(shù)據(jù)庫(kù)緩存類 自定義函數(shù)調(diào)用 數(shù)據(jù)庫(kù)配置 連接你的數(shù)據(jù)庫(kù) 數(shù)據(jù)庫(kù)快速入門例子代碼 字段數(shù)據(jù) 數(shù)據(jù)庫(kù)維護(hù)類 查詢輔助函數(shù) 數(shù)據(jù)庫(kù)類 查詢 生成查詢記錄集 表數(shù)據(jù) 事務(wù) 數(shù)據(jù)庫(kù)工具類 JavaScript類 輔助函數(shù)參考 數(shù)組輔助函數(shù) CAPTCHA 輔助函數(shù) Cookie Helper 日期輔助函數(shù) 目錄輔助函數(shù) 下載輔助函數(shù) Email 輔助函數(shù) 文件輔助函數(shù) 表單輔助函數(shù) HTML輔助函數(shù) Inflector 輔助函數(shù) 語(yǔ)言輔助函數(shù) 數(shù)字輔助函數(shù) 路徑輔助函數(shù) 安全輔助函數(shù) 表情輔助函數(shù) 字符串輔助函數(shù) 文本輔助函數(shù) 排版輔助函數(shù) URL 輔助函數(shù) XML 輔助函數(shù)
watak

CodeIgniter 用戶指南 版本 2.1.0

編輯文檔、查看近期更改請(qǐng) 登錄 或 注冊(cè)  找回密碼
查看原文

Session 類

Session 類可以使用戶在瀏覽您的網(wǎng)站時(shí),維持他們的狀態(tài)并跟蹤他們的行為。 Session 類將每個(gè)用戶的 session 信息序列化(serialize)后存儲(chǔ)到到 cookie 中(并同時(shí)進(jìn)行加密)。 您還可以將 session 數(shù)據(jù)存儲(chǔ)到數(shù)據(jù)庫(kù)中來(lái)增強(qiáng)安全性,但是這時(shí)要求存儲(chǔ)在用戶 cookie 中的 session ID 值能與數(shù)據(jù)庫(kù)中存儲(chǔ)的用戶 session ID 值相匹配。程序默認(rèn)只在 cookie 中存儲(chǔ) session。如果您在要在數(shù)據(jù)庫(kù)中存儲(chǔ) session 的話,需要按照下面指示的方法,在您的數(shù)據(jù)庫(kù)中創(chuàng)建需要的數(shù)據(jù)表。

注意: Session類并不使用PHP本身的session,而是使用類自己的session,這樣做,可以給開發(fā)者提供更大的彈性。

Note: 即使沒(méi)有使用加密會(huì)話,你也需要在配置文件里設(shè)置一個(gè)加密密鑰。這將有助于防止偽造會(huì)話數(shù)據(jù)。

初始化 Session

Sessions會(huì)在每個(gè)頁(yè)面載入后開始運(yùn)行,所以session類必須首先被初始化。您可以在控制器中初始化,也可以在系統(tǒng)中自動(dòng)加載(譯者注:在autoload.php設(shè)定)。session類的絕大部分都會(huì)在后臺(tái)運(yùn)行,所以初始化session時(shí),它session數(shù)據(jù)會(huì)被自動(dòng)讀取、創(chuàng)建和更新。

要在您的控制器構(gòu)造函數(shù)中初始化session類,您可以使用 $this->load->library 函數(shù):

$this->load->library('session');

一旦被載入, session就可以這樣使用: $this->session

Sessions 是怎樣工作的?

當(dāng)頁(yè)面載入后,session類就會(huì)檢查用戶的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的值。

對(duì)于您來(lái)說(shuō),需要知道的非常重要的一點(diǎn)就是,session類一旦被初始化,它就會(huì)自動(dòng)運(yùn)行。對(duì)于后面的事情,您可以完全不作理會(huì)。正如您將會(huì)在下面看到的一樣,您可以正常使用session來(lái)工作,甚至還可以添加自己的session數(shù)據(jù),而在這一切的過(guò)程中,讀、寫和更新的操作都是自動(dòng)完成的。

Session 數(shù)據(jù)是什么?

一個(gè) session 是由一個(gè)包括下列信息的數(shù)組組成的:

  • 唯一的用戶Session ID (這是一個(gè)平均信息量統(tǒng)計(jì)出來(lái)的非常堅(jiān)固的隨機(jī)字符串,使用MD5加密,默認(rèn)是每五分鐘就重新生成一次。
  • 用戶的 IP 地址
  • 用戶瀏覽器信息(取前120個(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
)

如果你將加密設(shè)置開啟,serialized 的數(shù)組會(huì)先被加密,然后存入cookie中。這會(huì)讓數(shù)據(jù)不容易被看到和修改,從而提高安全性。從這里可以找到更多關(guān)于加密的信息。Session類會(huì)自動(dòng)負(fù)責(zé)初始化和數(shù)據(jù)加密。

注意: 默認(rèn)情況下, Session Cookie 每隔 5 分鐘才會(huì)更新一次,這樣會(huì)減少對(duì)處理器的負(fù)荷。如果你重復(fù)的裝載頁(yè)面, 你會(huì)發(fā)現(xiàn)"上次活動(dòng)"的時(shí)間在五分鐘,或多余五分鐘的時(shí)候才會(huì)變化,也就是 cookie 上次被寫入的時(shí)間。 這個(gè)時(shí)間可以通過(guò)設(shè)置 application/config/config.php 文件里的 $config['sess_time_to_update'] 行來(lái)改變。

取得 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ù)不存在的話,這個(gè)函數(shù)會(huì)返回 FALSE (布爾值boolean)。

添加自定義的 Session 數(shù)據(jù)

session 數(shù)組的一個(gè)非常有用的用途是你可以向它里面添加你自己的數(shù)據(jù),這些數(shù)據(jù)會(huì)被保存在用戶的 cookie 中。這樣做的原因是什么呢?看看這個(gè)例子:

假設(shè),有個(gè)特定用戶登陸到你的網(wǎng)站, 當(dāng)他通過(guò)檢測(cè)后 你可以添加他的用戶名和電子郵件到 session cookie 中,這些信息可以在不去訪問(wèn)數(shù)據(jù)庫(kù)的情況下,當(dāng)成全局量來(lái)使用。

通過(guò)以下函數(shù),你可以傳遞一個(gè)新的用戶數(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ù)的寫法,可以每次只添加一個(gè)用戶數(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ù)的大小。

取得所有 Session 數(shù)據(jù)

用下面的這種方式可以得到一個(gè)所有Session用戶數(shù)據(jù)的數(shù)組:

$this->session->all_userdata()

代碼將返回一個(gè)類似這樣的關(guān)聯(lián)數(shù)組:

Array
(
    [session_id] => 4a5a5dca22728fb0a84364eeb405b601
    [ip_address] => 127.0.0.1
    [user_agent] => Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_7;
    [last_activity] => 1303142623
)

刪除 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);

閃出數(shù)據(jù)

CodeIgniter 支持 "閃出數(shù)據(jù)", 或者說(shuō)Session數(shù)據(jù)只對(duì)下次服務(wù)器請(qǐng)求可用, 然后會(huì)自動(dòng)清除。這應(yīng)該會(huì)非常有用,往往應(yīng)用在信息或狀態(tài)提示中(例如:“記錄2已刪除”)。

注意: 閃出數(shù)據(jù)變量名以“flash_”開頭,所以在你自己的變量名中要避免使用這個(gè)前綴。

要添加閃出數(shù)據(jù):

$this->session->set_flashdata('item', 'value');

你也可以使用和 set_userdata() 同樣的方式向 set_flashdata() 傳遞一個(gè)數(shù)組。

要讀取一個(gè)閃出數(shù)據(jù)變量:

$this->session->flashdata('item');

如果你發(fā)現(xiàn)你需要在一個(gè)附加的請(qǐng)求中保留一個(gè)閃出數(shù)據(jù),你可以使用 keep_flashdata() 這個(gè)函數(shù)。

$this->session->keep_flashdata('item');

將 Session 數(shù)據(jù)存入數(shù)據(jù)庫(kù)

由于Session數(shù)據(jù)數(shù)組是附帶一個(gè)Session ID保存在用戶cookie里的,你無(wú)法驗(yàn)證它,除非你把session數(shù)據(jù)存儲(chǔ)在數(shù)據(jù)庫(kù)中。在一些不需要或很少需要安全保護(hù)的應(yīng)用中,session ID 或許并不需要。但如果你的應(yīng)用需要安全保護(hù),驗(yàn)證是必須的。Otherwise, an old session could be restored by a user modifying their cookies.

當(dāng)session 數(shù)據(jù)在數(shù)據(jù)庫(kù)中可用時(shí),每當(dāng)從用戶cookie中發(fā)現(xiàn)一個(gè)有效的session,一個(gè)數(shù)據(jù)庫(kù)查詢就會(huì)被執(zhí)行以匹配它。如果 session ID 不相配,session 就會(huì)被銷毀。Session ID永遠(yuǎn)不會(huì)更新,它們只會(huì)在一個(gè)新的會(huì)話創(chuàng)建時(shí)生成。

為了存儲(chǔ)session,你必須先創(chuàng)建一個(gè)數(shù)據(jù)表。這是 session 類所需的基本結(jié)構(gòu)(用于MySQL的):

注意: 默認(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類就會(huì)在數(shù)據(jù)庫(kù)中存儲(chǔ)session數(shù)據(jù)。

同時(shí)確保你已經(jīng)在配置文件中指定了數(shù)據(jù)表名:

$config['sess_table_name'] = 'ci_sessions';

注意: Session類已經(jīng)內(nèi)置了清除過(guò)期session的垃圾回收機(jī)制,因此你不需要編寫你自己的事務(wù)來(lái)做這個(gè)。

銷毀 Session

要清除當(dāng)前 session:

$this->session->sess_destroy();

注意: 此函數(shù)應(yīng)該是最后被調(diào)用的。即使閃出變量已不再有效。如果你只想讓某幾項(xiàng)而不是所有項(xiàng)被銷毀,請(qǐng)使用 unset_userdata().

Session 的參數(shù)

你可以在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ù)中。在開啟這個(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 類多久會(huì)產(chǎn)生一個(gè)新的session 和 session id。
sess_match_ip FALSE TRUE/FALSE (布爾值boolean) 是否通過(guò)用戶的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ù)。

?

翻譯貢獻(xiàn)者: aykirk, bearcat001, Drice, Fanbin, guns1985, Hex, mchipengfei, mental, noproblem, qixingyue, shishirui, xwjie
最后修改: 2012-02-08 20:07:53
Artikel sebelumnya: Artikel seterusnya: