@ 那應該要怎麼保存使用者的登入狀態?
一個是把資料存放在瀏覽器上,稱為 cookie 。
另一個是把資料放在伺服器上,稱為 session 。
@ session_start(); ? $_SESSION ?
php 要使用 session 的話,必須先進行讀取的動作,
透過呼叫 session_start() 就可以進行這個行為。
(參考資料 http://us2.php.net/manual/en/function.session-start.php)
呼叫 session_start 後,
我們就可以自由在 session 放置任何資料。
以這個例子為例,我們以以下的語法進行登入狀態:
$_SESSION["login"] ="test" ;
表示在 session 裡面儲存 "login" 為名的資料,內容為 "test" 。
要注意的是 Session 的內容,並不限於當前的頁面,
也會被保存同網站上的其他頁面,
也就是每一頁都可以存取這個 session 變數。
以一般而言,登入變數會是全站到處被引用的變數,
比方說,如果我設定 login 是判斷是否登入狀態的屬性,
那我每一頁需要判斷登入的頁面,都需要呼叫 login 這個屬性進行確認。
@ 登出又要怎麼作呢?
更常被使用的是另一種作法是透過呼叫 session_destroy() ,
徹底清除該使用者存放於 session 上的所有資料。
如底下的例子。由於系統有字數限制,請使用者參考此一網址:
https://gist.github.com/3804416
這裡有TonyQ錄得線上操作說明影片:http://www.youtube.com/watch?v=cXW3oYuLIx4
線上範例: http://files.tonyq.org/iron5/06_04_form.php
@ action
form 標籤中有一個屬性叫 action ,可以指定送出的對象,
所以我們可以送資料給我們自己網站,甚至可以送給遠方的網站唷!
一般而言,為了避免資料邏輯的複雜、避免使用者重複送出表單跟很多理由,
我們會將處理資料的頁面與顯示資料區隔,
在這裡我們先簡單的從切出 form.php 與 login.php 開始,
進行 action 的練習
@ 基本元素列表與用法:
文字輸入框 <input type="text" value="預設值" name="參數名稱" />
密碼輸入框 <input type="password" value="預設值" name="參數名稱" />
長文輸入框(文字輸入區域) <textarea name="參數名稱">預設值</textarea>
@ 下拉式選單(Select)
<select name="參數名稱">
<option value="結果一">選項一</option>
<option value="結果二">選項二</option>
<option value="結果三">選項三</option>
<option value="結果四">選項四</option>
</select>
@ 單選的 radio box
- 請選擇類別:
- <input type="radio" value="1" name="radiobox1" />類別一
- <input type="radio" value="2" name="radiobox1" />類別二
- <input type="radio" value="3" name="radiobox1" />類別三
- <input type="radio" value="4" name="radiobox1" />類別四
@ 可多選的 checkbox
- 請選擇興趣:
- <input type="checkbox" value="1" name="checkbox1" />聽音樂
- <input type="checkbox" value="2" name="checkbox1" />看電影
- <input type="checkbox" value="3" name="checkbox1" />爬山
@ 只要 name 的名稱後面是以 "[]" 結尾的話,
伺服器會將多個資料收集起來,成為一個複合資料
伺服器會將多個資料收集起來,成為一個複合資料
- <?php
- //列印出所有取得的資料
- foreach($_GET AS $key => $value){
- echo "name:".$key.",value:".var_export($value)."<br />";
- }
- ?>
- <form>
- 請選擇興趣:
- <input type="checkbox" value="1" name="checkbox1[]" />聽音樂
- <input type="checkbox" value="2" name="checkbox1[]" />看電影
- <input type="checkbox" value="3" name="checkbox1[]" />爬山
- <input type="submit" value="submit" />
- </form>
@ 什麼是 Multipart
能夠處理這種複雜資料的格式。簡言之,他是透過在上傳的內容中定義不同分區(part),
有些存放純文字資料,有些存放檔案資料,由伺服器端進行解析。詳情請參考 Javaworld TW 這篇討論文章。
http://www.javaworld.com.tw/jute/post/view?bid=6&id=56147&sty=1&tpg=2&age=0
主要的實作細節:
1.表單必須宣告 enctype="multipart/form-data" ,表示採用 multipart 格式傳送資料。
2.檔案上傳的標籤為 <input type="file" />
3.method 必須為 POST
其他以 PHP 系統而言沒什麼特別的,一切照舊,
在伺服器端檔案可以透過 $_FILE 存取,其他資訊則仍透過 $_POST/$_GET 存取。
@ 安全注意
* 一定要特別小心檢查不能讓使用者傳 php 檔案(或其他可被網站執行之檔案)上來,
最好針對上傳副檔名以白名單的方式進行檢查(只允許特定副檔名上傳)。
網站伺服器主要是由副檔名判斷執行引擎,所以有關檔案上傳,
要對於網站能執行哪些應用程式,能上傳哪些內容,時時刻刻非常小心。
* 要注意網站系統空間是否足夠、盡量要限制使用者上傳大小,
簡單來講,不要因為使用者上傳的圖而塞爆了。
沒有留言 :
張貼留言