coldfusion / יצירת תכונת לוג-אין משתמש עם Coldfusion / אימות כניסה ושמירת סטטיסטיקות
אימות כניסה ושמירת סטטיסטיקות
הדבר הראשון שנרצה לעשות הוא לוודא שהמשתמשים מכניסים ערכים, אז נקים אימות צד-לקוח תוך שימוש בתוויות ו- כדי להפוך את השדות "שם משתמש" ו"סיסמא" הכרחיים למילוי. אם אתם לא יודעים איך לעשות את זה, אולי כדאי שתעצרו רגע ותקראו שוב את מאמרו של קאפילי "טפסים מגניבים ב-coldfusion". ווידוא המילוי הזה מבטיח ששדות שם המשתמש והסיסמא ימולאו שניהם לפני שתצטרכו להתחיל את הטיפול בהם. בעקרון, בסופו של דבר יש לנו את הבא כטופס הלוג-אין הראשי שלנו (login.cfm):
<cfform action="login2.cfm" method="post">
<b>User Name:</b><cfinput name="UserName" type="text" Required="Yes" message="Please Enter a User Name"><br>
size=2>
<b>Password:</b><cfinput name="Password" type="text" Required="Yes" message="Please Enter a Password"><br>
<input type="submit" value="Login Now!">
size=2>
</cfform>
יתכן ושמתם לב שתכונת הפעולה ב-cfform שלנו מוגדרת ל-"login2.cfm" - עמוד היעד שלנו לטופס הזה. המשתנים מתיבות הקלט שלנו יועברו הלאה כדי שנוכל לשים את קוד האימות שלנו ב-login2.cfm ועדיין לגשת למידע שהמשתמש הכניס.
עכשיו, כמובן, הגיע הזמן לקצת אימות צד-שרת. עלינו להתחיל את העבודה כשאנחנו בטוחים שהמשתמש/ת הם באמת מי שהוא/היא טוענים שהם. אחרת, טופס הלוג-אין שלנו עדיין היה מאפשר לכל אחד להיכנס לעמוד, בהתעלם מאם הוא או היא אכן משתמשים רשומים. הבה נפתח את login2.cfm שלנו (היעד של העמוד הראשון), וניגש לעבודה!
זה בעצם מאוד פשוט. כל מה שאנחנו צריכים לעשות הוא לוודא ששם המשתמש והסיסמא שהוכנסו למאגר המידע אכן קיימים שם, ובבקשה - מצאנו את המשתמש שלנו. אם תשימו אינדקס בטבלת המשתמשים שלכם ליד שם המשתמש, ביטוי ה-SQL הזה יהיה אפילו מהיר יותר. אבל ברמה ה"טהורה" ביותר, הוא גם ככה לא איטי במיוחד.
SELECT * FROM Users
WHERE UserName = '#Form.UserName#'
AND Password = '#Form.Password#'
עקרונית, זה מקבל את כל פרטי המשתמש, שברובם נשתמש ברשומות הסטטיסטיקה שלנו. אבל שתי הפעולות החשובות ביותר של השאילתא הזאת הן:
- לוודא שהמשתמש אכן קיים
- לקבל את ה-UserID הייחודי, בעזרתו אנחנו מסננים החוצה את שאר המידע שיש באתר, כמו מתכונים אישיים או חיפוש אחרון.
אם המשתמש אינו קיים, הוא אמור להיות חסום גישה לעמודים המוגנים שלכם. הריצו את השאילתא הזו ותוכלו לבדוק את ספירת הרשומות כדי לראות אם היא החזירה שורה. אפס שורות משמעותן שלא קיים כזה שילוב שם משתמש-סיסמא; שורות מרובות משמעותן שמאגר המידע שלכם לא בנוי כראוי, מאחר ושם המשתמש אמור להיות ייחודי. אם ניתן היה להכפיל את שם המשתמש, היו לכם משתמשים רבים שהיו עושים לוג-אין על אותו ID, מה שהיה נותן להם גישה למידע אחד של השני.
כמו כן, שימו לב שלמרות שבדוגמא שלנו השתמשנו ב -*SELECT כקריטריון הבחירה, חשוב לטובת מהירות היישום שלכם, לשלוף רק מידע שנחוץ לכם. מאחר וכל המידע השמור במאגר הדוגמא שלנו קשור ללוג-אין ולמעקב, *SELECT עובד בסדר גמור, אבל אם היינו שומרים גם מידע על כתובות, לדוגמא, היינו בוחרים עמודות ספציפיות בביטוי הבחירה שלנו.
דוגמא:
SELECT UserName,
Password,
LastIP,
LastBrowser,
LastLogin,
TotalLogins
FROM Users
WHERE UserName = '#Form.UserName#'
AND Password = '#Form.Password#'
התמודדות עם הכנסות לא חוקיות על השרת
למזלנו, ההכנסות הריקות מטופלות מקומית ב-coldfusion ע"י שימוש בתוויות <cfinput>. אבל אנחנו עדיין צריכים להתמודד עם משתמשים שמכניסים שם משתמש או סיסמא לא חוקיים. אז עקרונית, אם השאילתא בצד השרת מחזירה אפס שורות, אנחנו יכולים להחזיר את המשתמש לעמוד הלוג-אין עם הודעה. השיטה האהובה עלי לעשות את זה היא להעביר את שם המשתמש והודעת "לוג-אין לא חוקי" חזרה ב-URL וכיוון המשתמש מחדש לעמוד הלוג-אין. העמוד login.cfm אמור להיות מתוכנן כך שיתמודד עם זה בעזרת הפעולה ISDefined, כדי לבדוק האם משתני ה-URL קיימים או לא לפני שפולטים את העמוד.
שימו לב לתחתית העמוד login2.cfm (בסביבות שורה 52) והעמוד login.cfm וראו איך היא שונה מקוד אימות צד-הלקוח שבראשית אותם עמודים ובאמת מיישמת את הטכניקה הזאת.
עכשיו בואו נביט בתהליך שמירת הסטטיסטיקות של לוג-אין המשתמש.
אילו משתמשים מתחברים באופן קבוע? באילו דפדפנים הם עושים שימוש? כל כמה זמן הם נכנסים לאתר? לא יודעים? נשמע שאתם צריכים ליישם קצת מעקב אחרי המשתמשים שלכם כדי לראות מה הם עושים וכדי לעזור לכם להתאים את האתר לקהל שלו. אין בעיה. תודות לכמה ממשתני ה-CGI של coldfusion כמו סוג דפדפן וכתובת IP של המשתמש, אנחנו יכולים לעקוב אחרי מידע "אישי" שלו ולנהל את האתר שלנו בצורה טובה יותר. אם רוב המשתמשים שלכם מתחברים עם דפדפנים ישנים יותר, אולי כדאי שתוותרו על חלק מהגרפיקה המרהיבה באתר. אם כולם עושים שימוש בדפדפן החדש והטוב ביותר, אולי כדאי שתרחיבו את תכני המולטימדיה שלכם. בסך הכל, ככל שיהיה לכם יותר מידע על הגולשים באתר שלכם, כך תוכלו "לתפור" אתר שמתאים טוב יותר לצרכים שלהם, לתוכנה שלהם ואפילו למיקום שלהם!
ראשית, כל מידע מביטוי ה-SELECT שלנו שאנחנו רוצים להציג למשתמש צריך להיות שמור במשתנים בהם נוכל להשתמש מאוחר יותר בעמוד שלנו לתצוגה, בגלל שברגע שנעדכן אותו במאגר המידע, לא נוכל לשלוף אותו שוב מבלי לקבל את המידע החדש והמעודכן. ב- login2.cfm, תוכלו לראות אותנו שומרים את המשתנים הישנים כך:
<cfset oldIP = getUser.LastIP>
<cfset oldBrowser = getUser.LastBrowser>
<cfset oldLogin = getUser.LastLogin>
<cfset TotLogins = getUser.TotalLogins>
שנית, בואו ניקח את הדברים הפשוטים, מה שהדפדפן נותן לנו, ונשים אותם בכמה משתנים מקומיים. בעזרת משתני CGI של coldfusion, תוכלו בקלות "לתפוס" את הדפדפן ואת כתובת ה-IP בו עושה המשתמש שימוש.
<cfset newIP = CGI.REMOTE_ADDR>
<cfset newBrowser = CGI.HTTP_USER_AGENT>
עכשיו, בואו נעקוב אחרי קצת מידע משתמשים. נשתמש בפונקציה ()CreateODBCDateTime ובפונקציה ()NOW כדי ליצור חותמת תאריך-שעה שמאגר המידע שלנו יודע לקרוא. פשוט יחסית. נצטרך גם להגדיל את סה"כ הלוג-אינים שלנו ב-1, ואז לכתוב ביטוי SQL מעודכן עם <cfquery> כדי לעדכן את המידע שלנו. רישום מידע מהסוג הזה יסייע לנו להכיר תבניות פעילות ממוצעות של המשתמשים שלנו ולתת מענה לשאלות כמו: "האם משתמשים עורכים ביקורים חוזרים לאתר שלי?" ו"לפני כמה זמן התחברו רוב המשתמשים שלי?"
<cfset TotLogins = TotLogins + 1>
<cfquery Datasource="yourdatasourcename" name="UpdateUser">
UPDATE Users
SET TotalLogins = #TotLogins#,
LastIP = '#newIP#',
LastBrowser = '#newBrowser#',
LastLogin = CreateODBCDateTime(Now())
WHERE UserID = #session.UserID#
</cfquery>
עמוד הבא: שמירת מידע לוג-אין על הלקוח >>
|
|
|
|