לוגו אתר Fresh          
 
 
  אפשרות תפריט  ראשי     אפשרות תפריט  צ'אט     אפשרות תפריט  מבזקים     אפשרות תפריט  צור קשר     חץ שמאלה ‎print ‎"Hello World!"; if‎ ‎not rules.‎know ‎then rules.‎read(); חץ ימינה  

לך אחורה   לובי הפורומים > מחשבים > תכנות ובניית אתרים
שמור לעצמך קישור לדף זה באתרי שמירת קישורים חברתיים
תגובה
 
כלי אשכול חפש באשכול זה



  #2  
ישן 27-01-2007, 17:16
צלמית המשתמש של maxim k
  maxim k maxim k אינו מחובר  
 
חבר מתאריך: 05.08.06
הודעות: 2,860
שלח הודעה דרך MSN אל maxim k
בתגובה להודעה מספר 1 שנכתבה על ידי Silver Strike שמתחילה ב "[javascript] מערכת ניהול עוגיות - (פרסום הקוד)"

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

הבאג הוא בשיטה Read...אם אני אציב עוגיה בשם [w1][w2] ולאחר מכן עוגיה בשם [w2] (הכוונה שלי היא שהשם של העוגיה הראשונה מסתיים בשם של העוגיה השנייה)
מה שיקרה זה שגם כשאני אגש לעוגיה הראשונה וגם כשאני אגש לשניה אני אקבל את הערך של העוגיה הראשונה, בגלל שלא בדקת באיזה מקום נמצאה המחרוזת של שם העוגיה.

דוגמא:
קוד PHP:
 Cookie.Write("xx","this will appear twice",1);
Cookie.Write("x","bla bla",1);

alert(Cookie.Read("xx")+"\n"+Cookie.Read("x")); 


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

נערך לאחרונה ע"י maxim k בתאריך 27-01-2007 בשעה 17:22.
תגובה ללא ציטוט תגובה עם ציטוט חזרה לפורום
  #14  
ישן 09-02-2007, 02:55
  ישראל K ישראל K אינו מחובר  
 
חבר מתאריך: 25.08.03
הודעות: 9,114
משוב
בתגובה להודעה מספר 1 שנכתבה על ידי Silver Strike שמתחילה ב "[javascript] מערכת ניהול עוגיות - (פרסום הקוד)"

אמרתי לך "מחר", אך זה נמשך למחק, מחר ומחר... אז איכשהו החלטתי שהגיע סוף סוף הזמן לעשות לזה זמן

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

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

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

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

3. בנוסף בבדיקה בלולאה, נראה לי מיותר לעשות 2-3 בדיקות, במיוחד שאפשר ליצור את המערך באמצעות split עם המחרוזת "; " (התו נקודה פסיק ולאחריו תו רווח - בדקתי באיכספלורר 6 וכמובן בשועל, בשניהם לא נראתה בעיה להשתמש ביותר מתו אחד) ואז תמיד לבצע בדיקה אחת - האם הערך שווה ל-0.

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

על 2 השיטות הנותרות אין לי אף הערה, מחלקה מעולה


קוד:
function getCookVal(name) { var pos, pos2, cook=document.cookie; if(cook.indexOf(name + '=') == 0) pos = cook.indexOf(name + '='); else pos = cook.indexOf('; ' + name + '='); if(pos == (-1)) return false; pos += name.length + 1 pos2 = cook.indexOf(';', pos); if(pos2 != (-1)) cook = cook.substring(pos, pos2); else cook = cook.substring(pos); return cook; }

נערך לאחרונה ע"י ישראל K בתאריך 09-02-2007 בשעה 03:13.
תגובה ללא ציטוט תגובה עם ציטוט חזרה לפורום
  #15  
ישן 09-02-2007, 04:54
  משתמש זכר Silver Strike Silver Strike אינו מחובר  
 
חבר מתאריך: 11.09.04
הודעות: 1,032
שלח הודעה דרך ICQ אל Silver Strike שלח הודעה דרך MSN אל Silver Strike
בתגובה להודעה מספר 14 שנכתבה על ידי ישראל K שמתחילה ב "משוב"

דבר ראשון, תודה על התגובה
שנית, ערכתי את הקוד עפ"י ההערות שציינת (חלק מהם לפחות) והוא מופיע כאן: http://www.codepost.org/view/440

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

2. לא ממש ירדתי לסוף דעתך. למה בדיוק הכוונה?
3. אכן. האמת שממש לא העלתי על דעתי לפתור את העניין בדרך הזו ובמקום זה ביצעתי *עוד* שני בדיקות מיותרות לחלוטין - עודכן.
4. אופס . אכן מיותר לחלוטין - אחרי שהעברתי את ההשמה לבלוק של ההתניה הבנתי שאין בו צורך לכן הוא ירד לחלוטין.

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

תגובה ללא ציטוט תגובה עם ציטוט חזרה לפורום
  #16  
ישן 10-02-2007, 18:55
  ישראל K ישראל K אינו מחובר  
 
חבר מתאריך: 25.08.03
הודעות: 9,114
בתגובה להודעה מספר 15 שנכתבה על ידי Silver Strike שמתחילה ב "דבר ראשון, תודה על התגובה..."

2. לפני ביצוע הקוד:
קוד:
sGetNames = document.cookie.split("; ")

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

5. במבט נוסף נראה כי גם בשיטה Write כדאי להכניס את שלושת שורות הקוד הראשונות בתוך התנאי כבדוגמה הזאת:
קוד:
if(iDays) { var dCurrent = new Date(); dCurrent.setTime(dCurrent.getTime()+(iDays*24*60*6 0*1000)); iDays = '; expires=' + dCurrent.toGMTString(); } else { iDays = ''; }

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

יתכן שגם קטע ה-else מיותר, רק כתבתי אותו כדי להיות בטוח שדפדפן כלשהוא לא יחזיר "Undefined".
תגובה ללא ציטוט תגובה עם ציטוט חזרה לפורום
  #20  
ישן 10-02-2007, 21:59
  משתמש זכר Silver Strike Silver Strike אינו מחובר  
 
חבר מתאריך: 11.09.04
הודעות: 1,032
שלח הודעה דרך ICQ אל Silver Strike שלח הודעה דרך MSN אל Silver Strike
עודכן...
בתגובה להודעה מספר 16 שנכתבה על ידי ישראל K שמתחילה ב "2. לפני ביצוע..."

http://www.codepost.org/view/440

לקחתי את הרעיון שלך. זו דרך יותר נכונה לעבוד ובעקרון אני לא ממש יודע למה זה עבד עד עכשיו
אני מצרף את הקוד ללא ההערות...
קוד PHP:
 var Cookie = {
    
Read: function(sName){
        if(
typeof sGetNames == "undefined" || sGetNames != document.cookiesGetNames document.cookie.split("; ");
        for(var 
i=0i<sGetNames.lengthi++){
            if((
sGetNames[i].search(sName+"=") == 0)){
                return 
sGetNames[i].substring(sGetNames[i].search("=")+1sGetNames[i].length);
            }
        }
        return 
false;
    },
    
    
Write: function(sNamesValueiDays){
        if(
iDays){
            var 
dCurrent = new Date();
            
dCurrent.setTime(dCurrent.getTime()+(iDays*24*60*6  0*1000));
            var 
sExp "; expires="+dCurrent.toGMTString();
        }else 
sExp "";
        
document.cookie sName.concat("="sValuesExp"; path=/");
    },
    
    
Remove: function(sName){
        
this.Write(sName"", -1);
    }
}; 
_____________________________________
תמונה שהועלתה על ידי גולש באתר ולכן אין אנו יכולים לדעת מה היא מכילה

תגובה ללא ציטוט תגובה עם ציטוט חזרה לפורום
תגובה

כלי אשכול חפש באשכול זה
חפש באשכול זה:

חיפוש מתקדם
מצבי תצוגה דרג אשכול זה
דרג אשכול זה:

מזער את תיבת המידע אפשרויות משלוח הודעות
אתה לא יכול לפתוח אשכולות חדשים
אתה לא יכול להגיב לאשכולות
אתה לא יכול לצרף קבצים
אתה לא יכול לערוך את ההודעות שלך

קוד vB פעיל
קוד [IMG] פעיל
קוד HTML כבוי
מעבר לפורום



כל הזמנים המוצגים בדף זה הם לפי איזור זמן GMT +2. השעה כעת היא 04:05

הדף נוצר ב 0.07 שניות עם 12 שאילתות

הפורום מבוסס על vBulletin, גירסא 3.0.6
כל הזכויות לתוכנת הפורומים שמורות © 2024 - 2000 לחברת Jelsoft Enterprises.
כל הזכויות שמורות ל Fresh.co.il ©

צור קשר | תקנון האתר