לדעתי משהו כזה...
/** MYSQL Structure: ---------------- Table - Logins # ID (auto_increment, primary_key) # userName (varchar(15)) - encrypted in the database (MD5 - one way encryption) # password (varchar(25)) - encrypted in the database (MD5 - one way encryption) # insertDate (Date type) # exitDate (Date type) # accountStatus Default 1 (BIT) -- 0 = closed\disabled, 1 = open # # other details u want to save.... # /**/
עכשיו כאן זה נהיה מעניין. 1. כניסה לעמוד login 1.1 נבדוק אם קיים לנו SESSION מתאים שמחזיק מידע מוצפן(!) על המשתמש. 1.2 במידה ויש, נבדוק שאכן קיים משתמש עם נתונים תקינים 1.2.1 אם הנתונים תקינים (ברמת שאילתא SQL): 1.2.1.1 יבדק מצב החשבון שלו 1.2.1.1.1 אם החשבון "פתוח" - המשתמש יוקפץ לדף הבית/דף חשבון פרטי וכו'. 1.2.1.1.1 אחרת, הוא ישלח לאיזה עמוד מסויים שיודיע לו שהוא חסום (בדומה לסעיף 2.2.1.1.1) 1.2.2 אם נתונים אינם תקינים, יתבצע ניקוי של הSESSION והוא ישלח לסעיף 1.3 1.3 במידה ואין, יוצג טופס לוגין (שם משתמש + סיסמא), בעת לחיצה על "שלח" הוא ישלח לאותו עמוד רק שהפעם יש לנו נתונים לבדוק - ראה סעיף 2 (הפרדת סעיפים מאחר ויש הפרדת ישויות באופן רעיוני - ככה אני רואה את זה לפחות). 2. נבדוק באמצעות שאילתא SQL את התוכן 2.1 אם קיים שם משתמש עם סיסמא כזו: 2.1.1 נכניס SESSION עם הפרטים של המשתמש באופן מוצפן (MD5), נשמור את זמן ההתחברות שלו בmysql, נמחוק את המשתנה SESSION בשם loginAttempts אם קיים ונשלח אותו לפי סעיף 1.2.1 2.2 אחרת, 2.2.1 נבדוק האם קיים לו משתנה SESSION בשם loginAttempts (עם isset). 2.2.1.1 אם כן, נעלה אותו ב1 ונבדוק אם המשתנה גדול ממשתנה שמכיל את "מספר נסיונות ההתחברות המורשה" (בהנחה שנאתחל את המשתנה ל0 בפעם הראשונה) 2.2.1.1.1 אם כן, ננעל את החשבון שלו (Mysql) ונשלח אותו לאיזה עמוד שיגיד לו לעשות X (יצור קשר עם האדמניסטור וכו'), ובנוסף נשלח מייל לאדמניסטור על הבעיה. 2.2.1.1.2 אם לא, נשלח אותו למלא שוב את הטופס(ונודיע לו על הטעות) - ראה סעיף 1.3 2.2.1.2 אם לא, נאתחל את המשתנה SESSION בשם loginAttempts ל-0 ונשלח אותו לסעיף 1.3 (עם הטעות) דאגתי למשתנה exitDate ברמת הDB מאחר ואם אתה עושה logout.php אז שיהיו לך דרכים לראות כמה זמן הוא היה (כל דרך אחרת לבדוק לדעתי מתי המשתמש יצא, אינה נכונה מאחר והיא ב99 אחוז מהפעמים אינה מדויקת). אני מתאר לעצמי שזה לא עונה על כל הצרכים, אבל ניסיתי במשך כמה דקות לחשוב על סט בדיקות באופן מילולי וזה מה שיצא
