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

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



  #1  
ישן 13-09-2011, 16:37
  Xpein Xpein אינו מחובר  
 
חבר מתאריך: 21.01.06
הודעות: 813
בעיה | MVC ו- Cookie

שלום,
טוב יש לי בעיה קצת הזויה שאני לא מצליח להבין..
עשיתי מערכת MVC, שבה יש דף ראשי index שתמיד מוצג,
ומה שמשתנה זה הדף שנמצא תחת require בתוכו, בהתאם לcontroller שנשלח דרך שורת הכתובת

למשל localhost/contact מריץ את דף הindex, ואת הקונטרולר contact שנמצא בrequire בתוך הindex

עכשיו קורה משהו מוזר-
יש לי בלוק התחברות בview של הindex הראשי, שבודק אם הערך של cookie בשם logged_in הוא true,ואם כן הדף אמור להתחבר..ככה זה נראה:

קוד PHP:
 Cookie [logged_invalue:<?=$_COOKIE['logged_in']?>
<br/><br/> <font size="15">Index</font><br/> 
<?if ($_COOKIE['logged_in'] != 'true') {?>
....login block
<? } else { <?
...logged in block 



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

קצת קשה להסביר, תיווכחו בעצמכם במעבר בין העמודים הבאים בהתחברויות והתנתקויות :
http://chatbook.webuda.com/NewProject/
http://chatbook.webuda.com/NewProject/catalog
http://chatbook.webuda.com/NewProject/contact

מישהו יודע למה?
נ.ב אם נחוץ שאני אביא קטעים מסויימים של קוד אז אני אביא,פשוט הקוד ארוך ומתקשר למלא דפים
אז לא ידעתי בדיוק מה..
ולא להתייחס לזה שזאת התחברות לא מאובטחת בעליל, אני כרגע מבצע בדיקה כלשהי..
_____________________________________
--- ! Area Close ! ---


נערך לאחרונה ע"י Xpein בתאריך 13-09-2011 בשעה 16:41.
תגובה ללא ציטוט תגובה עם ציטוט חזרה לפורום
  #5  
ישן 14-09-2011, 13:08
  fadey fadey אינו מחובר  
 
חבר מתאריך: 15.07.02
הודעות: 1,027
בתגובה להודעה מספר 4 שנכתבה על ידי Xpein שמתחילה ב "תודה על התשובה! הגדרתי את..."

דבר ראשון קרא כאן: http://il2.php.net/manual/en/function.setcookie.php
שים לב שאם המערכת שלך נמצאת על דומיין אתה גם צריך להכניס אותו כפרמטר.
בגדול זה נראה בסדר. שמתי לב שאתה מזין ערך 'true' לתוך העוגיה.. שים לב ש
true לא שווה ל 'true' כמובן.. אולי עשית השוואה כזו באחד הקונטרולרים שלך שגורם לבעיה הזו.

בקשר לקיצור המטופש הזה, הסיבה המרכזית לא להשתמש בו היא שקוד צריך לשאוף להיות קריא כמה שניתן, וזה לא קריא.
דבר שני, לא כל שרת תומך בקשקוש הזה. תמיד כדאי לדבוק בצורות הרשמיות כדי להיות אוניברסלי..
אבל כמובן שהעניין הזה הוא לשיקולך בלבד.
_____________________________________
ציטוט:
Different people use different tools, but its mostly morons who pretend that the problems with PHP actually matter.

תגובה ללא ציטוט תגובה עם ציטוט חזרה לפורום
  #10  
ישן 15-09-2011, 21:27
  Xpein Xpein אינו מחובר  
 
חבר מתאריך: 21.01.06
הודעות: 813
בתגובה להודעה מספר 9 שנכתבה על ידי fadey שמתחילה ב "כשאתה אומר "לא עובד" למה אתה..."

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

אני אתאר איפה נוצרת העוגייה אולי זה יעזור...בתיקיית controller מצוי הקונטרולר של כל דף באתר
בקונטרולר של דף הindex נמצאת ההתחברות לאתר, יש שם instance של מחלקה אחרת user שנמצאת בתיקייה אחרת, ובמחלקה user אני יוצר את העוגייה..
למעשה כל פעם שהקונטרולר index מופעל(והוא מופעל בכל דף באתר כי כל דף נמצא תחתיו בrequire), נוצר instance חדש למחלקה user שבה נוצרת העוגייה
כנראה שזה המקור לבעיה..אבל זה עדיין לא ברור למה זה ככה מכיוון שהעוגייה נשמרת על המחשב
של המשתמש והיא מוגדרת לכל דף בדומיין הזה..:O
_____________________________________
--- ! Area Close ! ---

תגובה ללא ציטוט תגובה עם ציטוט חזרה לפורום
  #15  
ישן 16-09-2011, 09:44
  שימיadmin שימי אינו מחובר  
מנהל פורומי "תכנות ובניית אתרים" ו"חומרה ורשתות"
 
חבר מתאריך: 25.10.01
הודעות: 42,775
בתגובה להודעה מספר 12 שנכתבה על ידי Xpein שמתחילה ב "אתה בוודאי יודע איך עובדת..."

require מחליף את השורה שבה כתוב ה require, בתוכן הקובץ ש require הצביע עליו. לכל דבר ועניין, זה כאילו היה מדובר בקובץ אחד ארוך.

בוא אני אסביר לך איך עוגיות עובדות, ותענה בעצמך על השאלה שלך.

עוגיה היא בעצם כותר HTTP שנשלח על ידי השרת ללקוח, כתשובה לבקשת דף מהשרת על ידי הלקוח, יחד עם מידע אחר (זמן הבקשה, קידוד, הנחיות Caching, ועוד). לא שום דבר מעבר לכך. הכותר הזה נוסף לתשובת ה HTTP כאשר אתה משתמש בפונקציה setcookie (וכרגיל, רק אם לא נשלח שום פלט לדפדפן עדיין, אחרת תקבל אזהרת Headers already been sent...). אחרי שלקוח מקבל עוגיה, כתוצאה מקבלת תשובה משרת ה-HTTP, הוא מתייחס אליה כפי שהוא רואה לנכון (שומר אותה לזמן מסויים או עד סגירת דפדפן, או מתעלם ממנה לחלוטין, אם כך מוגדר לו). אם הדפדפן שמר את העוגיה, אזי בבקשות הבאות אל שרת ה HTTP, ביחד עם כותרי בקשת ה HTTP, ישלח הדפדפן גם את כל העוגיות הרלוונטיות לפי ה URL המבוקש (הגבלה לפי דומיין ולפי נתיב בתוך האתר, הכל כפי הכתוב בעוגיה). בתורו, השרת (או בעצם - PHP), יקבל את העוגיות שנשלחו על ידי הלקוח, והן יהיו זמינות ב $_COOKIE בצמדי key-value.

אז השאלה שלי עומדת בעינה - האם אתה מנסה להתייחס לעוגיה בתוך אותה הבקשה שבה יצרת אותה (ולא מעניין אם היו לך אינקלודים בקוד או לא, זה חסר משמעות) - או שאתה שולח את העוגיה, הגולש טוען דף חדש (אפילו אותו דף, העיקר שזו בקשה חדשה), ורק אז אתה מנסה להתייחס אליה?
_____________________________________
תמונה שהועלתה על ידי גולש באתר ולכן אין אנו יכולים לדעת מה היא מכילה
נמאס לכם לזכור סיסמאות? לחצו כאן!

תגובה ללא ציטוט תגובה עם ציטוט חזרה לפורום
  #16  
ישן 18-09-2011, 13:21
  Xpein Xpein אינו מחובר  
 
חבר מתאריך: 21.01.06
הודעות: 813
בתגובה להודעה מספר 15 שנכתבה על ידי שימי שמתחילה ב "require מחליף את השורה שבה..."

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

אחרי יצירת העוגייה אני טוען את אותו דף מחדש, ע"י header(). לפי מה שאתה אומר מספיק לצאת מהאתר ולהיכנס ובטעינה הבאה העוגייה אמורה להיות קיימת.
כאן הבעיה-כשאני מגדיר את העוגייה עם path כמו שציינתי בפוסטים
הקודמים, היא בכלל לא נוצרת..! כשאני לא רושם את הpath, היא נוצרת אך לא נשלחת בתשובת הHTTP
בכל הדפים(כי היא כנראה,לא מוגדרת אליהם).. מה הבעיה באיך שהגדרתי את העוגייה?

אני אראה חלקים של קוד,מה נשלח למה ואיך נוצרת הבקשה -
תחילה,מופעלת התצוגה של דף הבית :
$this->loadView('index',$this->data);
קוד PHP:
 function loadView($view,$vars="")
        {
            if(
is_array($vars) && count($vars) > 0)
                
extract($varsEXTR_PREFIX_SAME"wddx");
            
$file 'view/'.$view.'.php';
            
file_exists($file) ? require_once('view/'.$view.'.php') : $this->loadError(404);
        } 


בדף התצוגה,כאשר לוחצים על האינפוט של login, דף הindex נטען מחדש,ובקונסטרקטור של הקונטרולר שלו (שטוען למעשה את הview מחדש) רשום:
קוד PHP:
 if ($_POST['submit'] != null)
            {
                if (
$this->user->login())
                {
                    
$this->reloadPage();
                }
                else
                {
                    
$this->data['page'] = $this->getErrorPage(111);
                }
            } 

בif הראשון נשלחת הבקשה למחלקת user למתודת login,שיוצרת את העוגיות ושולחת
true או false, ולאחר מכן מופעלת הפעולה reloadPage שטוענת את בקשת הHTTP מחדש..
זאת מתודת הlogin שבה נוצרת העוגייה:
קוד PHP:
 function login()
        {
            if (
$_POST['username'] == 'ben' && $_POST['password'] == '123456')
            {
                
setcookie('logged_in','true',time()+60*60*24*30,'/','.webuda.com');
                return 
true;
            }
            else
            {
                return 
false;
            }
        } 

וזאת מתודת הreloadPage :
קוד PHP:
 function reloadPage()
        {
        
$address BASE_PATH;
        
header('Location: '.$address);
        } 
_____________________________________
--- ! Area Close ! ---


נערך לאחרונה ע"י Xpein בתאריך 18-09-2011 בשעה 13:48.
תגובה ללא ציטוט תגובה עם ציטוט חזרה לפורום
תגובה

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

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

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

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



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

הדף נוצר ב 0.08 שניות עם 10 שאילתות

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

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