這篇寫比較多關於註冊、登入相關的項目
1.使用MySQL函式做密碼加密
2.Cookie使用方法
3.session設置
1.使用MySQL函式做密碼加密
當在寫註冊、登入功能時
密碼的加密是一個要點
他可以在即使資料庫不幸被盜取後,損失也能降低
駭客即使取得加密之後的密碼也無能為力
加密的方法是使用資料庫的SHA()函式,例如:
INSERT INTO table (account, pw) VALUES ('John', SHA('password'))
上式使用的SHA()函式會將password這個字轉換成40個字元的16進位制字串
注意一點是SHA()函式是不可逆的過程,這是它防止被盜取的機制
假如要進行密碼驗證
只要再輸入一樣的字串,經過SHA()函式變換之後能得到相同的字串,例如:
SELECT * FROM table WHERE pw = SHA('password')
上式的password是使用者輸入的密碼
這樣一來就可以做好驗證的工作了
當然還有非常重要的一點一定要提醒
因為轉換的字串長度問題
一開始在建造密碼欄位時要改成40個字元長度
其他類似的函式有
MySQL的MD5() //安全性較差
PHP的sha1()及md5()
2.Cookie使用方法
當有必要持續記錄使用者登入狀態時,Cookie是一個選擇
他會將資料記錄並儲存在使用者端電腦裡
使用方法例如:
setcookie('index', 'value', time() + (60 * 60 * 1));
第三個變數會是cookie的存活時間值,沒有設置就是關掉瀏覽器即失效
範例中的例子是存活時間點會是現在過後的一個小時(3600s)內
讀取時使用$_COOKIE['index']來存取變數
假如要登出的話只要使存活時間成為過去時間即可
例如改成:
setcookie('index', 'value', time() - (60 * 60 * 1));
需要注意一點是Cookie設置仰賴瀏覽器協助
假使使用者關掉Cookie功能的話也不能成功
3.session設置
session可以視作另一種的Cookie
只不過資料儲存的地點是伺服器端,另外只要瀏覽器關閉即失效
這樣也可以避免瀏覽器關閉Cookie功能帶來的影響
假使cookie真的被停用時
server上的php.ini裡的session.use_trans_id 設定成1
這樣就可以克服問題了
使用session的範例:
logout.php======
<?php
//if the user is logged in, delete the session vars to log them out
session_start();
if(isset($_SESSION['id'])){
//delete the session vars by clearing the $_SESSION array
$_SESSION = array();
//delete the session cookie by setting its expiration to an hour ago
if(isset($_COOKIE[session_name()])){
setcookie(session_name(), "", time()-3600);
}
//Destroy the session
session_destroy();
}
?>
session_start()函式會啟動session功能,然後伺服器會發一組辨識ID
即使在登出也要使用這個函式才能存取session
尾部的session_destroy()結束session,瀏覽器關閉時也會自動呼叫這個函式
使用session的方法一樣是用全域函數 ,如$_SESSION['id'] = 'john'
要清除session的方法除了關掉瀏覽器外
$_SESSION = array()這樣,指定session為空陣列也可以
實際在運作時,session也很有可能在私底下會用到cookie
畢竟cookie是最佳化的資料儲存方式
session_name()可以幫助我們找到該cookie,這樣一來就可以握到完整的清除
沒有留言:
張貼留言