שלח תשובה

זירת השאלות

624
צפיות
11
תשובות

התחברות לאתר בשפת PHP

,‏ 8 ביוני, 2008

שלום לכולם,
אני מנסה ליצור דף כניסה לאתר המאומת מול MYSQL ואני רוצה שאחרי שהמשתמש ביצע כניסה, הוא לא יצטרך לבצע כניסה נוספת לעולם אלא אם לחץ על כפתור LOGOUT.
כיצד ניתן לעשות זאת ?

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

אשמח על תשובה.תודה וחג שמח לכולם ולמפעילי האתר היקרים!.
אבי.

תגיות:

11 תשובות

  1. תן לעוגיה תאריך תפוגה, והיא לא תמחק


    צוות WebMaster  

  2. dimdom1 הגיב:

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

    אגב, את העוגייה יצרתי לפני פלט HTML כלשהו.

    יש לכם רעיון אחר ?

    תודה

  3. אולי
    בעת ניסיון ההזדהות של המשתמש (בכניסה) אתה דורס את הנתונים שהיו בקוקי לפני?


    אלי ענתבי
    entry interactive
    http://www.entry.co.il

  4. dimdom1 הגיב:

    תשובה לשאלתך
    שלום אלי,
    תודה על העזרה.
    אני אתאר לך בדיוק את התהליך.

    בדף הכניסה login.php, אחרי שיוזר אומת אני יוצר 2 עוגיות, אחת ליוזר השנייה לסיסמא.
    כמו כן אני יוצר משתנה SESSION.

    אחרי שאני סוגר את הדפדפן, משמע סוגר SESSION עם השרת, האם העוגייה אמורה להישמר עם הנתונים שהוכנסו לה מקודם ?

    בדף ה- header.php  אני מבצע בדיקה האם יש עוגיות במחשב, אם כן אני לוקח את שם המשתמש והסיסמא מהעוגיה ומאמת אותם מול בסיס הנתונים.

    בפועל מה שקורה הוא שלאחר שסגרתי את ה-SESSION, אני נדרש לבצע אימות בשנית ל-SESSION חדש. משמע העוגייה לא קיימת או שהנתונים בה נמחקו.

  5. dimdom1 הגיב:

    הנה הקוד אם זה יוכל לעזור
    setcookie($DomainName_user, $username, $ExpirationTime);
    setcookie($DomainName_pass, $password, $ExpirationTime);

  6. לא מכיר PHP
    אבל רעיונית מה שיכול לגרום לבעיה זה:

    1. כמו שענבל אמרה למעלה – חייב לקבוע תאריך תפוגה לקוקי, אחרת היא אכן נמחקת עם סגירת הדפדפן. תוודא שאתה מגדיר את זה נכון

    2. יכול להיות שהצורה שאתה כותב את העוגיה דורסת אחת את השניה. שוב, אני לא מכיר PHP אז אני לא בטוח, אבל יכול להיות.

    3. תנסה לבדוק אם הקוקי אכן נכתבת מתכתחילה. יש כל מיני תוכנות לצפיה נוחה בקוקיז. תוודא שזה נכתב, שזה נכתב נכון, וכך תוכל לדעת מתי בדיוק היא נמחקת.


    אלי ענתבי
    entry interactive
    http://www.entry.co.il

  7. BuildHome הגיב:

    לא מספיק
    אני למדתי בעבר ובניתי כמה אתרים (פרויקטים) ב-PHP עם MYSQL.

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


    "החיים הם רק הדרך במסע הנפש", בילד 2004-2008 <img src='/images/6.gif'>
    http://Www.Torec.Net &nbsp;* http://Www.Torec.In

  8. dimdom1 הגיב:

    להלן הקוד ושוב תודה
    *******   login.php  *****************
    <?php
    // Check username and password while user try to login
            if (isset($_POST['login_check_if_press']) && ($_POST['login_check_if_press'] == "login")) {
                if(!$_POST['user_name'] | !$_POST['password']) {
                    echo "Requiered fields are empty (username and password";
                }else {
                    $username = $_POST['user_name'];
                    $username = mysql_escape_string($username);
                    $password = $_POST['password'];
                    $password = mysql_escape_string($password);
                    $sign_in_check = "SELECT UserName,Password,UserId FROM tbl_users WHERE UserName = '$username'";
                    $sign_in_check_result = mysql_query($sign_in_check)or die(mysql_error());
                    $sign_in_check2 = mysql_num_rows($sign_in_check_result);
                    if ($sign_in_check2 == "0") {
                        echo "User Name Doesn't exist";
                    }else {
                            while ($sign_in_row = mysql_fetch_array($sign_in_check_result))
                                {
                                    extract($sign_in_row);
                                    $sign_in_row_password = $sign_in_row['Password'];
                                    $sign_in_row_userid = $sign_in_row['UserId'];
                                }
                            if ($password != $sign_in_row_password) {
                                echo "Your Password is w

  9. dimdom1 הגיב:

    המשך של הקוד
    הבדיקה האם עוגייה נמצאת, זה נמצא ב- header.php


    //Checks if there is a login cookie
    if(isset($_COOKIE['DomainName_user'])) {
        //if there is a cookie with user details, it logs you in and directes you to the members page
        $CookieUsername = $_COOKIE['DomainName_user'];
        $CookiePassword = $_COOKIE['DomainName_pass'];
    }
    if ($CookieUsername !="") {
        $check = mysql_query("SELECT UserName,Password,UserId FROM tbl_users WHERE UserName = '$CookieUsername'")or die(mysql_error());
        while($info = mysql_fetch_array($check)) {
            if ($CookiePassword != $info['Password']) {
                header("Location: login.php");
                exit;
            }else {
                //Cookie was found therefor we create session id with userid and session username with username.
                $_SESSION['UserId'] = $info['UserId'];
                $_SESSION['UserName'] = $info['UserName'];
            }
        }
    }

  10. dimdom1 הגיב:

    משום מה הקוד נחתך באמצע, הנה ההמשך…
                }else {
                                $ExpirationTime = time()+946080000;
                                setcookie("DomainName_user", $username, $ExpirationTime);
                                setcookie("DomainName_pass", $password, $ExpirationTime);
                                
                                //header("Location: home.php");
                                //exit;
                            }
                    }
                }
            }
            ?>
    <form action="login.php" method="post">
    <table border="0">
    <tr><td>UserName:</td>
    <td><input type="text" name="user_name" style="width:150px;" maxlength="20"></td>
    </tr>
    <tr>
    <td>Password:</td>
    <td><input type="password" name="password" style="width:150px;" maxlength="20"></td>
    </tr>
    <tr>
    <td></td>
    <td><input type="submit" name="login_check_if_press" value="login"></td>
    </tr>
    </table>
    </form>

  11. BuildHome הגיב:

    אוקי
    תודה, אבל תיישר בבקשה הכל הכל לשמאל.

    יותר קל לצרף את הקוד בקובץ TXT להודעתך.


    "החיים הם רק הדרך במסע הנפש", בילד 2004-2008 <img src='/images/6.gif'>
    http://Www.Torec.Net &nbsp;* http://Www.Torec.In

שלח תשובה

חדש! אחסון אתרים של וובמאסטר

שירות אחסון אתרים
המקצועי של וובמאסטר!

מומחים באירוח אתרי
WordPress, Joomla, Drupal

  • שרתי לינוקס עם CloudLinux, LiteSpeed
  • 1GB דיסק SSD, 10GB תעבורה חודשית
  • ממשק ניהול cPanel, תעודת SSL חינם

עכשיו במחיר היכרות:
רק 420 ש"ח לשנה!