הוסטס - פורום אחסון האתרים הגדול בישראל

הוסטס - פורום אחסון האתרים הגדול בישראל (https://hosts.co.il/forums/index.php)
-   פורום תיכנות (https://hosts.co.il/forums/forumdisplay.php?f=14)
-   -   שליפת נתונים ע"י ID - COOKIE (https://hosts.co.il/forums/showthread.php?t=82994)

SniR-S 06-06-10 06:56

שליפת נתונים ע"י ID - COOKIE
 
אני בודק אם השם משתמש והסיסמא שהוכנסו שווים למה שיש במסד,
אם כן אני שולף בהתאם את ה ID ומכניס אותו לעוגיה.
ולאחר מכן אני רוצה לשלוף נתונים ע"י ה ID שבעוגיות, לדוגמה גישות.
אבל זה לא מאובטח, יש לכם רעיון אחר כיצד לעשות את זה?

AlmogBaku 08-06-10 00:44

אתה שומר בעוגייה נתונים שם שם משתמש וסיסמא עם האש(MD5 לצורך העניין) שהמשתמש הקליד. ניתן לשמור את הנתונים במבנה של מערך או json או מערך עוגיות או על פי סכמה משלך(הפרדה באמצעות : וכד').
אפשר להצפין את המידע הסופי בהצפנה דו-כיוונית כלשהי(base64 לדוגמא) לצורך סיבוך שליפת המידע באופן ידני, אך מנגד הדבר עשוי להקשות על הפיתוח והדיבאגינג(אם תשאל אותי- עדיף בלי).

בקו.

SniR-S 08-06-10 09:27

טעות שלי, פשוט התבלבלתי קצת וכנראה ששכחתי שהנתונים
שיש במסד מוצפנים (הסיסמא לצורך העניין) כמו שהם מוצפנים בעוגיה
ואפשר להשוות בינהם ..
בכל מקרה תודה,
יש לי עוד שאלה קצת אחרת.

יש לי את הקוד הבא (לבדוק אם קיים משתמש, אם כן להציג שגיאה)
PHP קוד:

function check_username($check_username) {
    
$query mysql_query("SELECT username FROM admins");
        while (
$result mysql_fetch_assoc($query)) {
            
$r_check_username strtolower($result['username']);
                if (
$check_username == $r_check_username) {
                    return 
true;
                } else {
                    return 
false;
                }
            }
}

if (
check_username($check_username) == true) {
    echo 
"שם המשתמש שבחרת תפוס";


הבעיה היא, שהוא עובד רק על המשתמש הראשון במסד, הוא לא עובר על שאר המשתמשים..
גם במידה ויהיו הרבה משתמשים, השאילתה הזו תיקח הרבה משאבים, אבל אין לי רעיון טוב יותר כרגע,
מכיוון שאם אני עושה דבר כזה:
PHP קוד:

$query mysql_query("SELECT id FROM admins WHERE username = '$username'");
$num_rows mysql_num_rows($query);
if (
$num_rows >= 1) {
echo 
"קיים משתמש";


זה יעבוד רק אם המשתמש שרשמו הוא אותו הדבר, לדוגמא
אם יש לי במסד משתמש Admin ומנסים להירשם עם Admin זה יעבוד.
אבל אם יש משתמש Admin ומנסים להרשם עם admin או aDmin
זה לא יעבוד, מספיק אות אחת שהיא לא אותו הדבר זה יאפשר למשתמש להירשם.

לכן, חוץ מהאופציות האלו שיש לי בראש כרגע,
הדבר היחיד שאני חושב עליו מלבד זה, זה לפתוח שדה חדש
שכל הכינויים ירשמו בו באותיות קטנות, ואיתו בעצם אני אעשה את ההשוואה,
השאלה אם אין איזה אופציה אחרת (צריך שהיא תהיה יעילה).

Shay Ben Moshe 08-06-10 10:43

קודם כל אתה יכול לבחור קידוד למסד שהוא case insensitive, מה ששגוי בפעולה שלך זה המיקום של הreturn false; הוא צריך להיות ממש לפני סיום הפונקציה ולא בelse. השיטה הזו ממש אבל ממש לא יעילה.
אם אתה משום מה לא רוצה להחליף קידוד למסד תוכל לעשות ככה:
PHP קוד:

$query mysql_query("SELECT id FROM admins WHERE LOWER(username) = 'LOWER($username)'"); 

כמובן שאת הlower case של ה$username תוכל לעשות בעזרת strtolower (עדיף לדעתי).

SniR-S 08-06-10 17:11

תודה רבה שי, אני ההיתי בטוח שיש אופציה לעשות את זה,

ואז מה שאני עושה עם השאילתה שהבאת לי, זה בודק אם קיים כבר או לא כמו שהצגתי כבר בהודעה הקודמת.
PHP קוד:

$query mysql_query("SELECT id FROM admins WHERE LOWER(username) = '$username'");
$num_rows mysql_num_rows($query);
if (
$num_rows >= 1) {
echo 
"קיים משתמש";


וה $username יהיה ב strtolower

AlmogBaku 10-06-10 08:47

בד"כ mySQL לא מבחין בcasesentive.. האבחנה הזו קיימת בסיסמאות אגב מכיוון שההאש שלך כן מבחין(MD5)

Shay Ben Moshe 10-06-10 08:55

אלמוג זה לא נכון לחלוטין להגיד שבד"כ MySQL לא מבחן בcase. זה תלוי בקידוד bin (קיצור של binary) זה אבחנה מלאה, CS (קיצור של Case Sensitive) רגיש להבדלים בין אותיות גדולות לקטנות ובעברית בין רגילות לסופיות, CI (קיצור של Case Insensitive) להפך. יש גם AI וAS שזה בעברית נוגע לניקוד..


כל הזמנים הם GMT +2. הזמן כעת הוא 08:44.

מופעל באמצעות VBulletin גרסה 3.8.6
כל הזכויות שמורות ©
כל הזכויות שמורות לסולל יבוא ורשתות (1997) בע"מ