$data['mytitle'] = "My site"; $data['base'] = $this->config->item('base_url'); $data['css'] = $this->config->item('css'); $data['mytitle'] = "A website to monitor other websites"; $data['text'] = "Please log in here!";
$this->load->view('entrypage',$data); }
它調用視圖:entrypage。 視圖中包含一個表格,這個表格讓用不着戶輸入用戶名和密碼。 HTML 表格須要指定一個處理$_POST的函數,咱們已經把它放在start控制器中,就是 assessme() 。用HTML代碼表示,在咱們的視圖上的表格應該是:
讓咱們看看代碼結構以及各部分如何交互。 (注意爲了要使例子簡潔,咱們不校驗用戶的輸入。 固然,這不會形成問題, CI 的表格類自動爲輸入數據「消毒」。
/*receives the username and password fromthe POST array*/ function assessme() { $username = $_POST['username']; $password = $_POST['password'];
/*calls the checkme function to see if the inputs are OK*/ if ($this->checkme($username,$password)=='yes') { /*if the inputs are OK, calls the mainpage function */ $this->mainpage;() } /*if they are not OK, goes back to the index function, which re-presents the log-in screen */ else { $this->index(); } } /*called with a u/n and p/w, this checks them against some list. For the moment, there's just one option. Returns 'yes' or 'no' */
function checkme($username='', $password='') { if ($username == 'fred' && $password =='12345') { return 'yes'; } else { return('no'; }
CI 有一個會話類來處理會話相關工做。 事實上,它大大減小了編碼量。咱們在上一章學習到 CI 有各類各樣的library,大大簡化了PHP的編程。 這些就是框架的核心: 集成大量代碼,爲你提供各類強大的功能。你要作的只是使用它們,而沒必要關心他們是如何運做的。做爲結果,你的應用使用了最專門的代碼,而你卻不須要本身去編寫它們!
檢查你的system/application/config/config.php 文件,你會找到像這樣的一個部分: -------------------------------------------------------------------------- | Session Variables |-------------------------------------------------------------------------- | | 'session_cookie_name' = the name you want for the cookie | 'encrypt_sess_cookie' = TRUE/FALSE (boolean). Whether to encrypt the cookie | 'session_expiration' = the number of SECONDS you want the session to last. | by default sessions last 7200 seconds (two hours). Set to zero for no expiration. | */ $config['sess_cookie_name'] = 'ci_session'; $config['sess_expiration'] = 7200; $config['sess_encrypt_cookie'] = FALSE; $config['sess_use_database'] = FALSE; $config['sess_table_name'] = 'ci_sessions'; $config['sess_match_ip'] = FALSE; $config['sess_match_useragent'] = FALSE;
在你的數據庫中保存會話數據很是簡單。 首先,建立數據庫表。 若是你正在使用 MySQL, 使用這一 SQL 語句: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,status varchar(5) DEFAULT 'no',PRIMARY KEY (session_id));而後,修改在system/application/config/database.php 文件中的鏈接叄數告訴 CI 數據庫在哪裏。詳細介紹參見第 4 章若是工做正常的話, 當你登陸或退出時,在你的數據庫表中增長了相關的數據。若是你在一張數據庫表中儲存會話, 當用戶登陸到你的網站,網站會查找cookie, 若是它找到了,就會讀取會話ID,並用這個ID去匹配數據庫表中保存的ID。你如今擁有一個強健的會話機制。 而這一切只須要一行代碼!一點聲明,PHP自己的會話類在用戶關閉cookie功能時可以應付。(取代生成cookie,它把會話數據加入URL) CI 類不會這樣作,若是使用CI,一旦用戶禁止cookie,他就不能登陸到你的網站。這方面須要加強功能。 但願Rich將會很快升級CI。安全注意到:會話類會自動地保存關於訪問者的 IP 地址和使用者的資料。你可使用一些加強的安全措施。經過修改config文件的二處設置可增長安全性:。 sess_match_ip: 若是你設定這個參數爲TRUE, 當它讀取會話數據時,CI 將會嘗試相配使用者的 IP 地址。 這將預防使用者使用'搶'來的cookie信息。可是,有些服務器 (ISP和大公司服務器) 可能存在不一樣 IP 地址上的相同使用者登陸的請求。 若是你設定這個參數爲TRUE,可能會給他們形成麻煩。。 sess_match_useragent: 若是你設定這爲TRUE, 當讀取會話數據的時候, CI將會試着匹配使用者代理。這意謂試着「搶奪」會話的人還須要匹配真正用戶的user agent設置。 它使「搶奪」變得稍稍有些困難。CI 也有一個 user_agent 類, 你能夠這樣裝載:$this->load->library('user_agent');一旦裝載, 你能要求它返回訪問你網站的瀏覽器和操做系統的各類信息, 而無論它是一個瀏覽器,手機或機器人。 好比,若是你想列出叄觀你的網站的機器人,你能夠這樣作:$fred = $this->agent->is_robot();if ($fred == TRUE) {$agent = $this->agent->agent_string();/*add code here to store or analyse the name the user agent is returning*/}類經過裝入後開始工做, 與用代理,瀏覽器,機器人和其它的類型的數組做比較,這個數組存放在system/application/config/user_agents。若是你願,你能夠容易開發出使你的網站鎖定特定機器人,特定瀏覽器類型的功能。 不過,記得一個攻擊者很容易寫出一個代理類型,並返回他想要扔給你的那種類型。所以,他們能容易地假裝成一般的瀏覽器。 許多機器人,包括象CI 的 user_agents 數組已列出的 Googlebot,是'品行端正的'。 這意味着若是你設定你的 robots.txt 文件排除他們,他們將不會強行攻擊。沒有容易的方法去阻擊一個不知名的的機械手,除非你預先知道他們的名字!在 CI框架中 ,會話機制保存那發出請求的 IP 地址,所以你可使用這個功能維護一個網站的黑名單。能夠用以下代碼取回來自會話的 IP:/*remember to load the library!*/ $this->load->library('session');/*look for an 'ip_address' variable in the contents of the session cookie*/$ip = $this->session->userdata('ip_address');所以你能針對黑名單做相應的安全處理,好比拒絕登陸。你也能夠用CI 的會話機制限制來自重複請求的損害-像是一個機器人經過重複地請求網頁來使你的網站超載。 你也可使用這一個機制處理 '字典'攻擊,即一個機器人不斷重複嘗試數百或者數以千計的密碼/用戶名組合直到它找到正確的一組。由於 CI 的會話類保存每一個會話的last_activity ,因此你能作到這一點。 每次,當網頁被請求時, 你能檢查多久之前這個IP地址的用戶發出一請求,兩次請求的間隔若是不正常,你能夠終止會話,或放慢響應的速度。摘要咱們已經概略介紹了咱們想要創建的一個應用, 和幾乎全部應用都須要解決的問題:會話管理和安全保證。爲了作到這一點,咱們已經學習了CI會話類的一引發細節,並且見到它如何生成會話記錄和在訪客的瀏覽器中生成cookie。當後續的請求發生時,你能夠讀取cookie對響應進行控制。