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

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

CodeIgniter 用戶指南 版本 2.1.0

編輯文檔、查看近期更改請 登錄 或 注冊  找回密碼
查看原文

Session 類

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

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

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

初始化 Session

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

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

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

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

Sessions 是怎樣工作的?

當(dāng)頁面載入后,session類就會檢查用戶的cookie中是否存在有效的session數(shù)據(jù)。如果session數(shù)據(jù)不存在(或者已經(jīng)過期),那么就會創(chuàng)建一個新的session并把他保存在cookie中。如果session數(shù)據(jù)存在,那么他的信息就會被更新,同時cookie也會被同時更新。每次更新都會重新生成session_id的值。

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

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

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

  • 唯一的用戶Session ID (這是一個平均信息量統(tǒng)計出來的非常堅固的隨機字符串,使用MD5加密,默認是每五分鐘就重新生成一次。
  • 用戶的 IP 地址
  • 用戶瀏覽器信息(取前120個字符)
  • 最新的一個活躍時間戳.

以上數(shù)據(jù)將會用以下數(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ù)組會先被加密,然后存入cookie中。這會讓數(shù)據(jù)不容易被看到和修改,從而提高安全性。從這里可以找到更多關(guān)于加密的信息。Session類會自動負責(zé)初始化和數(shù)據(jù)加密。

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

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

可以通過如下的函數(shù)來得到 session 數(shù)組的任何信息:

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

item 是數(shù)組里的相對應(yīng)數(shù)據(jù)的索引。例如,想要獲得 session ID, 你要使用如下的代碼:

$session_id = $this->session->userdata('session_id');

注意: 如果你的目標數(shù)據(jù)不存在的話,這個函數(shù)會返回 FALSE (布爾值boolean)。

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

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

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

通過以下函數(shù),你可以傳遞一個新的用戶數(shù)組到 session 數(shù)組中:

$this->session->set_userdata($array);

$array 是一個結(jié)合數(shù)組,用來存儲你的新數(shù)據(jù)。例如 :

$newdata = array(
???????????????????'username'? => 'johndoe',
???????????????????'email'?????=> 'johndoe@some-site.com',
???????????????????'logged_in' => TRUE
???????????????);

$this->session->set_userdata($newdata);

如果使用下面 set_userdata()函數(shù)的寫法,可以每次只添加一個用戶數(shù)據(jù)。

$this->session->set_userdata('some_name', 'some_value');

注意: Cookies 只能存儲 4KB 的數(shù)據(jù), 使用時要小心超出它的容量。特別指出的是,加密會產(chǎn)生比原數(shù)據(jù)更長的數(shù)據(jù)字符串,所以一定要當(dāng)心你要存放數(shù)據(jù)的大小。

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

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

$this->session->all_userdata()

代碼將返回一個類似這樣的關(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() 是用來添加信息到 session 中,而通過向 unset_userdata() 函數(shù)中傳遞 session key 可以用來刪除這些信息。例如, 你想要從 session 信息里去掉 'some_name':

$this->session->unset_userdata('some_name');

也可以給這個函數(shù)傳一個要刪除項的關(guān)聯(lián)數(shù)組。

$array_items = array('username' => '', 'email' => '');

$this->session->unset_userdata($array_items);

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

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

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

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

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

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

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

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

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

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

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

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

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

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

注意: 默認情況下這個表叫做 ci_sessions, 但是你可以給它指定任意名字,只要你更新了 application/config/config.php 文件以確保它包含了你所起的名字。 一旦你創(chuàng)建了數(shù)據(jù)表,你就可以像下面這樣在config.php文件中啟用數(shù)據(jù)庫選項:

$config['sess_use_database'] = TRUE;

一旦啟用了,Session類就會在數(shù)據(jù)庫中存儲session數(shù)據(jù)。

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

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

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

銷毀 Session

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

$this->session->sess_destroy();

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

Session 的參數(shù)

你可以在application/config/config.php 文件中找到以下的 Session 相關(guān)的參數(shù):

參數(shù) 默認 選項 描述
sess_cookie_name ci_session 你想要保存 Session Cookie 的名字。
sess_expiration 7200 session 持續(xù)的秒數(shù)。默認是2個小時(7200秒)。如果將這個數(shù)值設(shè)為: 0,就可以得到 永久 session。
sess_expire_on_close FALSE TRUE/FALSE (boolean) 這個選項決定當(dāng)瀏覽器窗口關(guān)閉時是否自動使session過期。
sess_encrypt_cookie FALSE TRUE/FALSE (布爾值boolean) 是否對 session 數(shù)據(jù)加密.
sess_use_database FALSE TRUE/FALSE (布爾值boolean) 是否將 session 數(shù)據(jù)存放入數(shù)據(jù)庫中。在開啟這個選項前,你要先創(chuàng)建一個數(shù)據(jù)庫表。
sess_table_name ci_sessions 任何有效的 SQL 表名 session 數(shù)據(jù)庫表的名字。
sess_time_to_update 300 時間以秒計算 這個選項控制 session 類多久會產(chǎn)生一個新的session 和 session id。
sess_match_ip FALSE TRUE/FALSE (布爾值boolean) 是否通過用戶的IP地址來讀取 session 的數(shù)據(jù)。 注意 ,有些網(wǎng)絡(luò)運行商 ISPs 會動態(tài)的改變IP, 所以將這個選項設(shè)為 FALSE, 才有可能得到永久的 session。
sess_match_useragent TRUE TRUE/FALSE (布爾值boolean) 是否要按照對應(yīng)的 User Agent 來讀取 session 數(shù)據(jù)。

?

翻譯貢獻者: aykirk, bearcat001, Drice, Fanbin, guns1985, Hex, mchipengfei, mental, noproblem, qixingyue, shishirui, xwjie
最后修改: 2012-02-08 20:07:53
Article précédent: Article suivant: