模組簡單設計 設計簡單的賬號系統

2021-09-01 14:10:15 字數 1985 閱讀 5731

下面考慮**乙個簡化版使用者賬戶系統,從註冊,登入,使用,登出四個方面做個簡單的設計

account表包含下面三個字段

id 乙個表唯一的id,標識使用者

user 使用者名稱

passwd 使用者密碼(為了防止資料庫被侵入洩露密碼,需要如md5(passwd)或者crypt單向加密)

1,使用者註冊(post /register.php)

① 如果**是https協議,直接通過post方式提交使用者名稱和密碼等資訊;

② 如果是http協議,考慮到有可能傳輸資料被監聽,可以用js對資訊加密(比如對密碼計算md5);

注:由於使用者註冊是一次性行為,這裡可以簡化業務。不過為了防止惡意程式批量註冊使用者,可以引入驗證碼或者限制ip一段時間內呼叫此介面次數。

post:

account [email protected]

user ciaos

passwd passwd

伺服器端用md5或者crypt處理密碼後存入資料庫,如下

2,使用者登入(post /login.php)

這是乙個很頻繁的行為,容易被第三者監聽,密碼一般需要加密。為了防止被窮舉使用者密碼,可以引入乙個隨機數避免頻繁呼叫,後台也應該控制一定時間內的介面呼叫次數。

post:

user ciaos

passwd md5(md5(passwd)+tag)

tag time()

伺服器端按照同樣演算法計算md5(資料庫中加密後密碼+tag)是否與passwd一致

md5(md5(passwd)+tag) equal or not md5(資料庫密碼密文+tag)

如果使用者登入成功,生成乙個cookie儲存使用者資訊用於以後驗證使用者,由於後續步驟需要從cookie中提取使用者資訊,所以需要用可逆演算法。為了避免別人猜測cookie,伺服器端需要儲存乙份私鑰。

http basic/digest認證以及aes,des加密都是比較成熟安全的解決方案,不過有點複雜。我們這裡實現乙個最簡單的cookie生成演算法。

<?php

function alterstring($content)

return $content;

}?>

生成cookie的方式(此處用主鍵_id代替user,減少賬號洩露風險)

<?php

$c_userid = base64_encode(alterstring($_id));

setcookie("userid",$c_userid,time()+3600*24);

?>

瀏覽器就儲存了cookie(userid = agsccxy%3d)

3,訪問**

使用第二步得到的cookie訪問**,伺服器端指令碼解析cookie獲取使用者資訊

<?php

if(isset($_cookie["userid"]))

) //查詢使用者資訊 $userinfo = db.userinfo.findone()

}?>

4,登出**

刪掉cookie即可

<?php

setcookie("userid","",time() - 3600);

header("location: index.php");

?>

附加思考:第三步需要頻繁讀取資料庫,可以考慮快取或者記錄session等方式避免頻繁的資料庫操作。

可以考慮使用下面的流程:

① 判斷伺服器端是否有session,如果有則直接訪問受限資源,如果無轉②;

② 查詢資料庫或者快取校驗cookie是否合法,如果cookie不存在或者合法則跳轉到登入頁面,如果合法,則生成session。

③ 如果採用這種設計,登出**時還需要清除session才行

簽到模組的簡單設計思路

什麼是簽到功能?為什麼要做簽到功能?簽到規則 設計思路 七天累計簽到 按月累計簽到 借助redis 總結參考 toc和上班打卡一樣,使用者每天可以在應用內進行一次 簽到 用來表明使用者今天已經登入且使用了該應用,同時簽到後很能獲取一定的獎勵。以上2中的簽到方式中,可以考慮增加簽到提醒功能,特別是需要...

系統許可權的設計之簡單設計

工作時間也不長,但是總想寫一些自己的收穫。公司利用的技術也比較單純,asp.net,js也不怎麼需要用,唯一寫的多的就是sql語句。好了,廢話不多說了,開始談談我在做專案中一些對系統許可權的收穫,不過很多都是專案中看到的,我就想自己重新做一遍。也許會有 很多的問題和考慮不全的地方,但是我還是要寫出來...

反饋系統簡單設計

反饋系統 原始碼和部署說明參見 talk e r模型 user角色 普通使用者 專業人員 管理員 專業人員 根據type 區域或問題型別 檢視對應分配的問題列表 解決問題,更改問題狀態 管理員 維護系統,使用者,模組,專業人員 使用者 提交問題使用者端 1.提交反饋輸入框 問題標題 text 問題詳...