PHP +MySQL快速入門 Lesson 4.

Slides:



Advertisements
Similar presentations
分享人:張益源. 個人資料介紹 姓名:張益源 畢業:體育系 97 級 專長:田徑、籃球、游泳 任教學校:慈濟大學實驗國民小學 學校職務:體育兼資訊老師.
Advertisements

1 自然人憑證 結合人事差假管理系統 指導老師:丁德榮 教授 作者:何岳剛、蘇巨鋒、廖偉吏、鄭致瑋、湯媛喬、李封儒 報告人:廖偉吏 彰化師範大學 資訊工程學系 報告日期: 95/11/2.
第六章 网页设计与制作基础.
白玉苦瓜 余光中.
第 4 章 PHP 基本語法.
第5章 HTML 標籤介紹.
第8讲 HTML与PHP基础 静态网页 vs. 动态网页.
网页制作 第一讲
第7章 表 格 清华大学出版社.
第三讲 站点链接与表格布局.
网页 设计与制作.
第五单元课1-3 层叠样式表.
模块1 网页设计基础 实训1 体验HTML文档 1.1 网页基础知识 1.2 网站配色方案 1.3 网站设计常用软件
CDM Project Management Database Development
Chapter 7 網頁應用程式與狀態管理.
Ch07 PHP程式基礎 網頁程式設計.
Ch03 VB.NET語法建立ASP.NET 網頁程式設計.
第3章 超文本标记语言(HTML) 3.1 基本结构标记 3.2 文本格式标记 3.3 超链接标记<A></A>
建國技術學院資訊管理學系 饒瑞佶 2004/7/5 彰化縣政府補助辦理網頁設計資料庫應用班 建國技術學院資訊管理學系 饒瑞佶 2004/7/5.
PHP+MySQL互動式網頁程式設計班 PHP進階語法 講師:林業峻 CSIE, NTU 6/ 19, 2010.
PHP程式設計 二、HTML & PHP基本語法 建國科技大學 資訊管理學系 饒瑞佶.
Hello World 體驗實作第一個JSP程式.
Chap5 PHP程式設計進階 授課講師:.
PHP5與MySQL5 入門學習指南 凱文瑞克 著 第 9 章 常數.
計算機概論 請老師填入姓名主講 課本:數位傳真2012 博碩文化出版發行.
第四章 網頁表單與資料傳遞.
留言版 1.先Create一個留言板的table
Introduction to PHP part3
PHP5與MySQL5 入門學習指南 凱文瑞克 著 第 13 章 陣列應用.
PHP Cookie.
XSS & SQL Injection理論 2014/7/29 許子謙.
PHP 5 入門基礎 第一個PHP 程式 PHP 資料型態.
利用PHP將資料存入MySQL PHP 5 Tutorial 範例:
網路概念 APACHE PHP MYSQL HTML BY 董仔 08/01/14.
PHP平台安裝-如何取得軟體 各軟體支援機構網站: Apache Server:
Cookie 存取Cookie Cookie有效時間 Session 存取Session session 函數
進階 WWW 程式設計 -- PHP Regular Expression 靜宜大學資訊管理學系 蔡奇偉副教授 2004
PHP5與MySQL5 入門學習指南 凱文瑞克 著 第 18 章 Cookie和 Session.
無障礙網頁 公關室.
PHP+MySQL互動式網頁程式設計班 檔案上傳程式設計 講師:林業峻 CSIE, NTU 7 / 3, 2010.
檔案上傳 所謂檔案上傳,就是將檔案由客戶端的主機,藉 由瀏覽器傳送到伺服器的資料夾上。
PHP 程式流程控制結構.
第3 章 VBScript的控制结构.
張智星 台大資工系 多媒體檢索實驗室 第九章 小餅乾(Cookies) 張智星 台大資工系 多媒體檢索實驗室.
网 站 设 计 与 建 设 Website design and developments
Cookie 存取Cookie Cookie有效時間 Session 存取Session session 函數
PHP 變數、常數與運算子 變數 常數 運算子
武汉纺织大学传媒学院 cm.wtu.edu.cn
PHP5與MySQL4 入門學習指南 凱文瑞克 著 第 16 章 檔案處理.
PHP +MySQL快速入門 Lesson 3.
架站實做—AppServ
我们是如何开发禅道软件的 王春生
HTML 103 互動式網頁.
Chang Chi-Chung 國立大里高級中學
PHP程式設計 Cookie & Session 建國技術學院 資訊管理學系 饒瑞佶.
Ch09 在網頁之間傳遞資訊 網頁程式設計.
HTTP 1.1 Method OPTIONS GET HEAD POST PUT DELETE TRACE CONNECT
HTML 103 互動式網頁 助教:黃毓瑩.
網站(web) 授課:方順展.
XML備份MySQL資料庫 <html> <head>
利用PHP將資料存入MySQL PHP 5 Tutorial 範例:
第6章 PHP的数据采集.
第6章 框架实现多窗口网页.
PHP程式設計 五、程式流程控制結構 建國科技大學 資訊管理學系 饒瑞佶.
網頁設計實務- PHP 與資料庫整合.
分頁.
PHP5與MySQL5 入門學習指南 凱文瑞克 著 第 12 章 迴圈指令.
第1章 HTML基础 主讲人:刘泰然 经济管理学院.
表单页面 表单是用户利用浏览器对Web站点网络数据库进行查询的一种界面,用户利用表单可以输入信息或选择选项等,然后将这些信息提交给服务器进行处理。通过表单,既可以将浏览器的信息发送到Internet服务器上,同时表单也可以使用户与站点的浏览者交互或从浏览者那里收集信息。它是网页的设计者和使用者相互交流的工具。表单对象包括文本域(单行、多行、密码)、列表、菜单、复选框、单选框、按钮等。
第17章 PHP應用實例探討 17-1 PHP應用實例探討 17-2 圖片版的訪客計數 17-3 訪客留言簿 17-4 聊天室
Presentation transcript:

PHP +MySQL快速入門 Lesson 4

四、cookie 與 session 認識cookie 1 session 2 session實作『會員登入系統』 3

什麼是 cookie 與 session ? 在程式設計中,經常會需要在短暫時間內紀錄一些使用者的資料,如帳號、密碼…等等,使用資料庫來紀錄又不是很方便,也會佔用伺服器資源,這時候,使用cookie或session來記錄這些資料是最好不過的選擇。

4-1 認識cookie cookie是用來記錄網站運作所需要的資訊,這些資訊是放在一個檔案裡面,而這個檔案呢,就是存放在使用者端(Client)的硬碟裡。當使用者打開瀏覽器後,cookie參數會自動將網站需要的資訊存在電腦中,當使用者再次開啟瀏覽器時,程式只要讀取使用者電腦中的cookie,就能取得相關資訊了。

4-1.1 cookie的限制 cookie在使用上有一些限制: 1.每個瀏覽器最多只能存取300個cookie,也就是說同一台電腦最多只能存放300個 cookie檔案。 2.cookie的檔案最大只能到4K Bytes容量。 3.使用者若將瀏覽器的cookie功能關閉(或者瀏覽器版本太舊,不支援cookie),則無法使用cookie功能。 4-1.2認識 setcookie( )函數 PHP是使用setcookie()函數來建立cookie的,其語法為: setcookie ( 名稱,值,[有效期限],[路徑],[網域],[安全模式] ) setcookie函數最多可以設定六個,比較常使用到的是前面三個參數,PHP會將cookie的名稱視為變數,cookie的值則視為變數的值。上面setcookie函數,中括號的參數表示可省略。 範例:註冊一個cookie變數,名稱為A,值為123

有個需要特別注意的是,在使用setcookie函數之前,不可輸出任何資料,否則將造成程式運作錯誤,因此建議將setcookie函數放在程式的最前面。 有了存入(註冊)cookie的功能,那該怎麼讀出cookie的內容呢?我們可以使用以下程式碼來取得電腦中cookie變數資料。 $_COOKIE["變數名稱" ] 範例:建立cookie程式碼與讀出cookie內容程式碼 執行畫面:

4-1.3 cookie的有效時間 cookie利用設定有效時間,就可以不會因為關閉瀏覽器,而喪失效力,其設定方式如下: time( )+秒數 如設定cookie A的有效時間為10分鐘( 60 × 10 = 600 秒 ),範例如下: time函數會自動抓取目前時間的timestamp (單位為秒),再加上600秒就是cookie的有效時間,當600秒的時間到了,cookie就會自動失效。 當然,除了使用time函數設定cookie的有效時間外,還有另一個函數也可以用來設定cookie的有效時間,那就是 mktime函數,其設定語法如下: mktime(時,分,秒,月,日,年) 想要設定cookie存活到2010年7月1日,範例如下:

4-1.4 刪除cookie setcookie函數除了可以建立cookie外,也可以用來刪除cookie,很特別吧! 那該如何使用呢?很簡單,只要設定第一個參數就好,就表示要刪除cookie了。 範例: 4-1.5 實做簡易cookie計數器 利用cookie製作一個簡易計數器 以下範例程式分為四個部份:  £ 讀取cookie變數counter的值。  £ If條件式判斷。  £ 註冊cookie。  £ 將計數值輸出至畫面上。

範例: 程式運作解析:  £ 程式執行第一次:因為我們並沒有設定cookie的值,所以讀取的$counter值為 『空值』,因此if條件式成立,將0指派給$counter;於註冊cookie後,將目前 $counter的值輸出至畫面上。  £ 程式執行第二次﹝含之後﹞:讀取的$counter的值就是上次執行時所註冊的值 ,因為$counter 的值存在,if條件式不成立,因此執行$counter的值會加1;於 註冊cookie後,將目前$counter的值輸出至畫面上。

第一次執行結果: 我們在瀏覽器上重複按『重新整理』,看看執行後的畫面會是如何。 執行結果: 簡單的計數器已經完成,你是否也會使用cookie了呢?

4-2 session session和cookie其實是滿類似的,也是用來記錄網站運作所需要的資訊,只不過cookie是存放於客戶端(Client),而session是放在伺服器端(Server)。cookie存放在使用者端的硬碟,使用者可以任意的修改,安全性較差,session存放於伺服器端的硬碟,使用者無法任意修改,因此,session的安全性比cookie來的佳。但相對的,因為session存放在伺服器端的硬碟,當然會造成伺服器一點點的負擔,不過對於目前的伺服器等級來說,這一點點負擔是幾乎感受不到的唷。所以,目前常見的購物網站、會員制網站…等,都有運用到session的技術喔。

4-2.1 session以何種形式存在? Session會將資料存放在一個檔案裡面,而這個檔案的命名規則有幾個特性: £ 以『sess_』做為檔案名稱的開頭。 £ 『sess_』後面接著是32位元的數字和字母組合而成的檔案名稱。 £ 若有啟動session,每個瀏覽器將會對應到一個獨立的session檔案,而且它的檔 案名稱都是獨一無二的。

4-2.2 session_id( ) session id是什麼?剛剛有提到,每個瀏覽器將會對應到一個獨立的session檔案,而且它的檔案名稱都是獨一無二的。這個檔案名稱也就是當下這個瀏覽器所對應到的session id。 範例:註冊一個session變數,以產生一個session檔案。 使用session_id( )函數將session的id輸出在畫面上:

接著來比對看看,session的檔案名稱與使用程式所輸出在畫面上的session id是不是相同呢?

4-2.3 啟動session 不管是要對session做讀取或寫入的動作,都必須宣告,其語法為: session_start(); 值得注意的是,session_start函數之前不能有任何資料的輸出,否則將會造成錯誤,因此若有使用到session_statr函數,都建議要寫在網頁的最前端。 程式碼: 執行結果:

session.save_path = "儲存路徑" 第一種方法: 1. 開啟『C:\WINDOWS』目錄,尋找一個『php.ini』的檔案,並以純文字文件 開啟。 2. 開啟『php.ini』後,尋找『session.save_path』這個設定值。找到一個前面沒有 分號『;』的地方,這項才是真正的設定(參考下圖)。因為『;』是php.ini之中的 註解,他只是個範例,並不會真正去執行的喔。session.save_path的值,必須輸 入要存放session檔案的路徑,其方式如下: session.save_path = "儲存路徑"

AppServ預設將session的檔案存放在Windows的暫存目錄中,當然我們也可以自行修改設定值,在此我們設定session檔案儲存於『C:\AppServ\session』這個目錄裡面。

若你有自行設定儲存路徑,必須要重新啟動Apache Server,設定值才會生效喔。

修改設定值之後,你可以嘗試寫一隻註冊session的程式,看看產生出來的檔案會不會在你所設定的目錄裡面。

第二種方法: 我們可以直接利用PHP所提供的函數,去找出我們的儲存路徑。 函數名稱:『session_save_path( )』 範例: 執行結果: 由於我們已經將儲存路徑修改過了,所以出現的儲存路徑為『C:\AppServ\session』。

▲執行結果 4-2.5讀出session 讀出session資料的語法與cookie很類似,其語法如下: $_SESSION["變數名稱"] 範例:註冊一個session變數,名稱為id 讀取session程式碼: ▲執行結果

4-2.6刪除sesion 刪除session有兩種作法,這兩種方式都非常的實用,也很常用到,請務必了解兩者的差異。 1.session_unregister("變數名稱"); 2.session_destroy( ) ; 第一種作法: 『session_unregister("變數名稱");』:此種方式,可指定要刪除session檔案裡的其中一個變數,session檔案並不會被刪除。 範例一:註冊兩個session變數,名稱分別是id與name

看看session檔案存放的地方,產生了一個session檔案:

範例二:刪除指定的session變數 $mesessionid = $_SESSION[“id”]; 使用完刪除 執行結果:

來看看剛剛的記錄檔 有沒有發現,只剩下一個session變數存在這個session檔案裡面,表示指定刪除某個session變數了。 第二種作法: 『session_destroy( )』:此種作法,是直接刪除該瀏覽器所對應的session檔案。 範例: 先註冊兩個session

在看看儲存位置的記錄檔: 已經有紀錄檔了,再來我們使用『session_destroy( )』刪除所註冊的session。 ▲執行結果

來看看儲存的記錄檔位置 看!記錄檔也一起刪除了,這就是『session_destroy( )』和『session_unregister(“變數名稱”);』之間不同的地方。 4-2.7 session函數 PHP提供了許多session相關的函數,以下是一些函數的列表: 函數名稱 功能說明 session_cache_expire( ) 設定cache可以使用的時間,如果沒指定,則傳回php.ini檔案中session.cache_expire的設定值(預設為180)。 session_cache_limiter( ) 傳回cache限制字串,php.ini檔案的預設值為nocahe,假如指定為public( session_cache_limiter( public) ),則可以使用快取。

session_decode( ) 將session資料解碼。 session_destroy( ) 取消所有註冊的session變數,記錄檔也刪除。 session_encode( ) 將session資料編碼。 session_get_cookie_params( ) 傳回cookie的相關資訊,如有效時間、路徑…等。 session_id( ) 傳回目前的session ID。 session_is_registered( ) 檢查session變數是否已註冊,已註冊傳回True,否則傳回False。 session_module_name( ) 傳回或設定session模組。 session_name( ) 傳回目前的session名稱,php.ini檔案預設值為PHPSESSID。 session_readonly( ) 讀取session內容,但不能修該內容。 session_register( ) 註冊session變數。 session_save_path( ) 尋找session的儲存路徑。 session_set_cookie_params( ) 設定php.ini檔案中的cookie參數。 session_set_save_handler( ) 設定session的儲存功能。 session_start( ) 啟動session。 session_unregister( ) 取銷所指定的session變數。記錄檔仍然存在。 session_unset( ) 釋放所有的session變數,但是記錄檔仍然存在。 session_write_close( ) 寫入session資料及結束session。

4-3 使用session實作『會員登入系統』 開始製作前,我們先規劃一個很簡單的會員登入系統,大致上會有以下這幾個頁面: £ index.php:會員登入頁面,有一表單可填寫帳號與密碼。  £ login_check.php:驗證會員的帳號與密碼。  £ members_index.php:會員登入成功歡迎頁面。  £ members_loginout.php:會員登出畫面。

index.php 會員登入頁面 <? session_start(); session_destroy(); ?> <html> <head> <title>登入頁面</title> </head> <body> <p align="center">請輸入帳號、密碼</p> <form method="POST" action="login_check.php"> <table border="1" width="300" align="center"> <tr> <td>帳號:</td> <td><input type="text" name="id" size="20"></td> </tr> <td>密碼:</td> <td><input type="password" name="pw" size="20"></td> </table> <p align="center"><input type="submit" value="登入"></p> </form> </body></html>

此登入頁面,在一開始我們就使用了session_start( )來啟動session,然後利用session_destroy( )來刪除所有session檔案,先清除不該有的session資訊。 執行畫面:

login_check.php : 驗證會員身份 <? $news_pw=array("Bill"=>"aaa","Calvin"=>"0000","Andy"=>"1234","David"=>"789"); $news=array_keys($news_pw); //傳回news_pw陣列中所有的索引值 if ( !in_array($id,$news) ) { echo "您非本站會員喔!請離開!!"; exit; } if ( $pw != $news_pw[$id] ) echo "您輸入的密碼錯誤喔!請重新輸入!!"; session_register("id","pw"); header("location:members_index.php "); ?>

如果輸入錯誤的帳號、密碼,就會被程式擋下,以下為執行畫面: 如果驗證通過,我們用session_register()將使用者的帳號與密碼儲存在session檔案中,以便其他程式可以隨時讀取出來使用,並將網頁導向至會員登入成功的歡迎頁面" members_index.php"。 會員登入成功的歡迎頁面,我們將儲存在session裡面的id讀出來,並顯示於畫面上。

執行畫面: 當然囉,有了登入一定會有登出嘛,否則使用者怎麼樣也無法刪除session,那資料不就都被別人看光光了!! 大功造成!會員已經可以正常登入登出了,但是…這樣的系統安全嗎?請嘗試在登出之後,按瀏覽器的『上一頁』按鈕,你會看到什麼!? members_loginout.php 會員登出程式 <? session_start(); session_destroy(); header("location:index.php"); ?>

咦,怎麼沒有顯示id出來呢?因為使用者已經登出了,session檔案已經被刪除,當然讀不到session的id 啦。這樣的程式,就可以稱之為bug(蟲),為什麼呢?因為這一頁是給會員看的,可是在沒有登入的情況之下,任何人只要知道網址都可以進入這個頁面,那不就太危險了嗎!?再來,我們就為這個會員系統,加一個簡單的驗證機制。 在我們寫的程式裡有個規則『會員的帳號密碼驗證正確者,才會註冊session,否則,則不會註冊session』,因此,我們可以判斷讀出來的id是否為空值,若為空值,就表示使用者沒有登入會員囉。

members_index.php 會員登入成功歡迎頁面 <? session_start(); $member_id = $_SESSION["id"]; $member_pw = $_SESSION["pw"]; If($member_id=="" OR $member_pw=="" ) { echo "尚未登入喔"; exit; } ?> <html> <head> <title>會員登入成功歡迎頁面</title> </head> <body> <?echo $member_id;?>您好!!! <p><a href="members_loginout.php">登出會員</a></p> </body> </html>

我們在沒有登入的情況之下,直接輸入網址『members_index.php』,會看到什麼? 這樣的系統雖然陽春,但卻是『麻雀雖小五臟俱全』;在寫程式的時候,除了讓程式正常運作之外,這樣的bug也要很注意喔。 ※小提示:若會員登入之後所應用的頁面很多,我們也可以將驗證這一段獨立成一個 檔案,在需要驗證會員是否登入的頁面再include進來就可以囉!