שם:  php1.GIF
צפיות: 75
גודל:  6.9 קילובייט
עוגיות
מהי עוגיה?
כאשר אומר "עוגייה", הכוונה היא למחרוזות טקסט שאפשר לאחסן על מחשב הלקוח, השימוש ב-PHP עם עוגיות יכול לקרוא את העוגיות, לשתול מידע ועוד.

איך מתחילים לעבוד?
מבנה של הגדרת עוגייה הולך כך:
קוד PHP:
setcookie(CookieNameCookieValueCookieExpireCookiePathCookieDomainCookieSecure); 
שורת הקוד תגדיר עוגיה שתשלח אל מחשב המשתמש כאשר ייכנס לדף המכיל את קוד זה.
פירוש הפרמטרים של הפונקציה:
  • CookieName - שם העוגייה, עם ערך זה ניגש לעוגייה, נשנה ערך וכ'ו.
  • CookieValue - ערך העוגייה, ערך זה מאוחסן במחשב הלקוח. בגלל שללקוח יש גישה לראות את העוגיות שהושתלו, עדיף לא לשים מידע חשוב בעוגייה.
  • CookieExpire - הזמן בו תפוג העוגייה. הזמן הולך לפי מספר השניות שחלף מאז ה-1 בינואר, 1970. בד"כ היא בעזרת הפונקציה time() שעליה נרחיב בהמשך.
  • CookiePath - הנתיב בשרת שבו העוגייה תיהיה זמינה.
  • CookieDomain - התחום שבו תיהיה העוגייה זמינה.
  • CookieSecure - עם ערך זה יוגדר כ-1 אז העוגייה תיווצר רק עם הפרוטוקול יהיה HTTPS. ברירת המחדל היא 0.
שים לב, כאשר אנו משתלים עוגייה בצד הלקוח אנחנו צריכים לעשות את זה לפני כל התגים. כלומר לפני תג ה-<html>.


דוגמה טובה להשתלת עוגייה, רק נשתיל עוגייה לא נעשה איתה כלום בינתיים:
קוד PHP:
<?php
setcookie
("MyFirstCookie""There is my first cookie!");
?>
<html>
    <head>
        .
        .
        .
    </head>
    <body>
        .
        .
        .
    </body>
</html>
זוכרים שאמרתי שצריך להגדיר את העוגייה לפני כל ה-HTML? אז בבקשה!

לפי התבנית יצרנו עוגייה בשם "MyFirstCookie" ונתנו לה ערך שהוא "There is my first cookie!".
כפי ששמתם לב לא הגדרנו את כל הפרמטרים, זה לא חובה. אך אם אתם רוצים אפשר להגדיר את זה לפי הפרטים שמילאנו למעלה.

אם נצא מהדפדפן נראה שהעוגייה נמחקה. דבר היוצר אי נוחות.
איך אפשר לעשות שזה יימחק רק אחרי X זמן ולא איך שיוצאים מהדפדפן?
בשביל זה יש את השדה CookieExpire, שאם לא נגדיר אותו אז יגיד לעוגייה להמחק איך שאנו יוצאים מהדפדפן.
אם אנחנו רוצים לעשות שהעוגייה תמחק 5000 שניות לאחר שסגרנו את הדפדפן.
בשביל זה בשדה CookieExpire נרשום time() + 5000 שזה אומר שזה ימחק 5000 שניות מהזמן הנוכחי.

נגדיר את זה כך:
קוד PHP:
<?php
    setcookie
("MyFirstCookie""There is my first cookie!"time() + 5000);
?>
והשאר, רגיל.

קבלת עוגיות
עד עכשיו רק הגדרנו עוגיות, אך אם נרצה לקרוא להם? מה נעשה?
בשביל זה יש את המשתנה הגלובאלי $_COOKIE[].
הוא מוגדר כך:
קוד PHP:
$_COOKIE[cookieName]; 
בתוך הסוגריים המרובעות ( [] ) אנחנו נותנים את שם העוגייה.
לדוגמה, נבנה תוכנית אשר רושמת את העוגייה שלנו.
קוד PHP:
<?php
    setcookie
("MyFirstCookie""There is my first cookie!"time() + 5000);
?>
<html>
    <head>
        .
        .
        .
    </head>
    <body>
        <h1>My first cookie in PHP!</h1>
        <?php echo($_COOKIE['MyFirstCookie']); ?>
    </body>
</html>
אם נשים לב בתגית ה-<body> הגדרנו קוד PHP:
<?php echo($_COOKIE['MyFirstCookie']); ?>
עשינו שזה ירשום (echo) את העוגייה שהגדרנו בראש העמוד.
כלומר נקבל את העוגייה אם נכתוב את שמה בסוגריים המרובעים.

בדיקה אם עוגייה קיימת
כבר שתלנו כמה עוגיות על צד הלקוח, אבל מה קרה אם עוגייה אחת נמחקה מסיבה כזאת או אחרת?
בשביל זה יש את הפונקציה isset() שמשמשת אותנו לזה:

קוד PHP:
<?php 
            
if(isset($_COOKIE['MyFirstCookie'])){
                echo(
$_COOKIE['MyFirstCookie']); 
            }
            else{
                echo(
"You dont have cookie!");
            }
        
?>
בדקנו אם יש עוגייה בשם MyFirstCookie. אם כן אז יחזיר ערך TRUE ונוכל להתקדם בלולאה, אם לא זה יחזיר ערך FALSE.

פשוט לא?

מחיקת cookies
אתה רוצה למחוק עוגייה, למשל המשתמש התנתק מהחשבון והוא צריך שלא יהיו עוגיות.
בשביל זה צריך למחוק עוגיות לא?

לזה יש מספר שיטות:
  1. הגדרת זמן שכבר עבר.
  2. להגדיר לזה ערך ריק.
  3. להשתמש בפונקציה unset().

איך לעשות?
1) פשוט מאוד, להגדיר עוד פעם את אותה עוגייה ובערך של פקיעת העוגייה לתת ערך עבר, לדוגמה:
קוד PHP:
setcookie("MyFirstCookie""There is my first cookie!"time() - 5000); 
והעוגייה תמחק.

2) דיי דומה ל-1, אך במקום זמן נשים ערך ריק:
קוד PHP:
setcookie("MyFirstCookie"""); 
והעוגייה תמחק.

3) פונקציה מותאמת, בלי יותר מידי התחכמויות:
קוד PHP:
unset($_COOKIE['MyFirstCookie']); 
והעוגייה תמחק.

וזהו!
אם יש לכם שאלות, בקשות או כל דבר אחר אתם מוזמנים להכנס לפורום שפות צד שרת.