logo


פרק 3: שמירת מצב

דוגמאות לעוגיות חלק שני: יצירת העוגיה

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

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

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

שוב, תוכלו לצפות בסקריפט ה dosearch.cgi השלם.

#set cookie for search
#/usr/local/bin/perl
use CGI;
$cgiobject=new CGI;
$cgiobject->use_named_parameters;

שוב, אנו מתחילים מיצירת סביבת CGI לסקריפט.

&get_state_variables;
$cookie_data=&prepare_cookie;
&set_cookie($cookie_data);
&performSearch

ה main של dosearch.cgi קורא למספר שגרות (subroutines). ראשית כל אנו מאחזרים את המצב של שדות הטופס בעזרת get_state_variables; לאחר מכן אנו דוחפים מידע זה לתוך עוגיה ב prepare_cookie, ואז שולחים את העוגיה למחשב המשתמש דרך set_cookie. לבסוף, אנו מפעילים את החיפוש הדימיוני שלנו דרך preformSearch.

sub get_state_variables()
 #retrieve from the CGI queries the keys and value 
 #we want to store in the cookie
 { $search_term=$cgiobject->param("search_term");
   $result_style=$cgiobject->param("result_style");
   $result_perpage=$cgiobject->param("result_perpage");
 }

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

sub prepare_cookie()
 #packages the variables into one data string for storage in cookie
 { $cookie_data="search_term=$search_term|".
                "result_style=$result_style|".
                "result_perpage=$result_perpage";
   return $cookie_data;
 }

כאן אנו יוצרים מחרוזת, cookie_data$, אשר מכילה את המשתנים והערכים בפורמט שבחרנו, אותו סקרנו קודם לכן. מובן שמבנה העוגיה שרירותי לחלוטין – בחרנו מבנה זה מכיוון שקל לתאר אותו, ונוח לעבד אותו בעזרת השגרה crumble_cookie. היינו יכולים לבנות שלוש עוגיות נפרדות (במילים אחרות, עוגיות בשם: "search_term", "result_style", "result_perpage" ) במקום לדחוף את כל המידע לעוגיה אחת בלבד, ולקרוא לכל אחת מהן בשם משתנה-השאילתה המתאים (במילים אחרות, עוגיות הקרואות “search_term", “result_style” ו "result_perpage"). drawform.cgi הייתה משיגה את הערכים של שלושת העוגיות בלא צורך לבצע עיבוד לתוכן שלהן. אנו בחרנו להשתמש בעוגיה אחת הן על מנת להראות עקרון של דחיסת מידע לתוך עוגיה אחת, והן מכיוון שבעולם הגדול שימוש בעוגיה אחת נחשב מנומס יותר מאשר שימוש בעוגיות רבות.

sub set_cookie($cookie_data)
 #sets cookie on user's machine
 { $final_cookie=$cgiobject->cookie(-name=>'searchform',
                              -value=>$cookie_data,
                              -expires=>'+6M');
   print $cgiobject->header(-cookie=>$final_cookie);
 }

ליבו של סקריפט זה – set_cookie לוקח את מחרוזת המידע הדחוסה בתוך cookie_data$ ויוצר את העוגיה במחשב המשתמש, בשני שלבים: שלב ראשון – אנו משתמשים במתודת ה cookie של אובייקט ה CGI, על מנת לבנות את כל העוגיה, אשר מושמת בתוך final_cookie$. מתודה זו דורשת מספר פרמטרים: כאן, שלחנו לו את שם העוגיה ("searchform"), את תוכן העוגיה ("cookie_data"), ואת תאריך התפוגה (שישה חודשים). ניתן להגדיר את תאריך התפוגה לכל פרק זמן שהוא, והגדרת תאריך המוקדם מהתאריך הנוכחי גורמת אוטומטית לתפוגת העוגיה (בפועל המשמעות היא מחיקת העוגיה). לבסוף העוגיה נשלחת לעמוד ככותרת HTTP, דרך מתודת ה header של אובייקט ה CGI. שימו לב ששליחת כותרת זו מכינה את הדפדפן לקבלת פלט HTML, אשר אנו יכולים לשלוח החל מנקודה זו והלאה. עמוד הבית של CGI.pm מתאר את הפורמט להגדרת תאריך התפוגה וכן מידע נוסף העוסק ביצירת עוגיות באופן כללי.

sub performSearch()
 { print $cgiobject->
   start_html(-title=>'Search results',-bgcolor=>'white');
   print "blah blah blah"
   # ... rest of dosearch Perl code ... #
 }

לאחר שהעוגיה נוצרה, אנו נכנסים לגוף הסקריפט הדמיוני dosearch.cgi; הדוגמא למעלה אמורה להדגים רק את העובדה שאנו יכולים להתחיל לשלוח HTML וקוד של מנוע החיפוש – אם זה היה קיים באמת.

דוגמאות לעוגיות חלק ראשון: יצירת העוגיה
תוכן עניינים
מחשבה אחרונה על עוגיות

אודות
תוכן עניינים
פרק 1: ה Perl שאתם צריכים לדעת
פרק 2: קישור Perl לעמודי הרשת
פרק 3: שמירת מצב
שמירת מצבים  
עוגיות; חברותנו המושמצות  
דוגמאות לעוגיות חלק ראשון: אחזור עוגיה  
דוגמאות לעוגיות חלק שני: יצירת העוגיה  
מחשבה אחרונה על עוגיות  
שמירת מצב חד פעמית או תסריט "בניית הפיצריה"  
בניית פיצריה: לקיחת ההזמנה  
בניית פיצריה: חישוב המחיר  
בניית פיצריה: השלמת ההזמנה  
בניית פיצריה: עדכון הזמנה  
הרהור אחרון  
פרק 4: HTML בחטף ותבניות (Templates) רשת
פרק 5: עיבוד וניתוח של עמודי רשת
פרק 6: להשתעשע עם בסיסי נתונים מקוונים:אקסס
פרק 7: המודל MySQL
פרק 8: להשתעשע בבסיסי נתונים - GUFE - החזית הכללית והשימושית
פרק 9: המילניום - ניהול זמן ותאריך
פרק 10: ניהול רשימות והאשים (Hashs)
פרק 11: הפניה להפניה
פרק 12: הכרות עם mod_perl