آژانس هواپیمایی
pop up

مشکل با session و class

شروع موضوع توسط saeed_violinist ‏14 جولای 2007 در انجمن PHP

  1. saeed_violinist

    saeed_violinist Registered User

    تاریخ عضویت:
    ‏1 آپریل 2004
    نوشته ها:
    1,275
    تشکر شده:
    3
    محل سکونت:
    Netherlands
    دوستان سلام، من این مشکلو در یکی دو سایت خارجی هم مطرح کردم متاسفانه تابحال بی نتیجه بوده.

    قضیه از این قراره که من یک کلاس مدیریت سبد خرید واسه یه فروشگاه نوشتم که در لوکال با xampp به راحتی کار میکنه و هیچ مشکلی نداره.

    اما همینو که میفرستم رو سرور دردسر شروع میشه، در تمام حالات که جایی تابعی از این کلاس فراخوانی میشه پیام خطای Fatal error: Call to a member function on a non-object صادر میشه، فقط در یک حالت این سبد خرید کار میکنه اونهم تنها وقتی که بار اول که میخوای اصلا سایت رو بیاری، اولین لینک رو query string مربوط به اضافه کردن کالا به سبد خرید رو بدی. بعد اگه یک صفحه جلو یا عقب بری دوباره پیام خطای Fatal error: Call to a member function on a non-object صادر میشه. ساده تر بگم منظورم اینه که session فقط در اولین فراخوانی ایجاد و معتبر میشه اما به محض اینکه از صفحه به یک صفحه دیگه میرم session از دست میره.

    دوستان نظری دارید؟ اگه به اطلاعات بیشتر یا خود کد ها برای پاسخگویی نیاز هست حتما بگید، گفتم صفحه شلوغ نشه و الا من ته متن باز هستم!
     
  2. firebird

    firebird Registered User

    تاریخ عضویت:
    ‏2 جولای 2005
    نوشته ها:
    1,424
    تشکر شده:
    9
    من اینجور مواقع که کد روی localhost درسته و رو سروز کار نمیکنه اول phpinfo رو بررسی می کنم. ورژن و ....
    بعد این فایل رو رو هر دو تست می کنم. نتیجه اجرا رو در دو فایل میریزم و با یک یوتیلیتی مقایسه نگاه میکنم ببینم چه تنظیماتی فرق میکنند. دو سه بار نتیجه گرفتم.

    PHP:
    <?
    $inis ini_get_all(); 
    echo 
    "<pre>";
    print_r($inis);
    echo 
    "</pre>";
    ?>
     
  3. alik

    alik کاربر قدیمی پرشین تولز

    تاریخ عضویت:
    ‏23 سپتامبر 2005
    نوشته ها:
    2,147
    تشکر شده:
    1,224
  4. saeed_violinist

    saeed_violinist Registered User

    تاریخ عضویت:
    ‏1 آپریل 2004
    نوشته ها:
    1,275
    تشکر شده:
    3
    محل سکونت:
    Netherlands
    من فرصت کنم اون تفاوت پیکربندی سرور با لوکال رو درمیارم، البته اختلاف عمده اینه که لوکال php5 هست و سرور php4 ولی مشکلی نداره از نظر هماهنگی کلاس با php4 ، خوب ببینم با این چه میکنید :D !

    PHP:
    //CART
    include "./inc/cls/cart.php";
    if(
    session_id() === ""){
        
    session_start();
    }
    if (!isset(
    $_SESSION['cart']) || $_GET['reset'] == 1) {
        
    $_SESSION['cart'] = new CLS_CART();
    }
    //CART
    کد بالا رو در فایلی به اسم config.php ذخیره کردم و این فایل رو در ابتدای همه صفحات گذاشتم (البته قبل از include کردن این فایل یک آرایه ساده برای نام صفحه گذاشتم که فکرنکنم مشکل ساز باشه....
     
  5. Behzad1984

    Behzad1984 کاربر تازه وارد

    تاریخ عضویت:
    ‏14 جولای 2007
    نوشته ها:
    13
    تشکر شده:
    0
    محل سکونت:
    Tehran, Iran
    Object با Class فرق می کند. پیغام خطایی که ذکر کردید، مواقعی بروز می کند که بخواهید متدی را اجرا کنید، در حالی که هنوز از کلاس مورد نظرتان، نمونه سازی نکرده اید. مشکل با session نیست، مشکل اینجاست که آبجکتی وجود ندارد که متد مورد نظر بر روی آن اجرا شود.


    php4 خطایی از شما نمی گیرد، چون فرقی بین Class Methods و Object Methods قائل نمی شود. اما برای این که به صورت ماست-مالی قضیه را حل کنید، کافی است متدی را که خطا از آنجا ناشی می شود، به صورت static تعریف کنید. البته در این صورت، کد شما در php4 قابل اجرا نخواهد بود.
     
  6. saeed_violinist

    saeed_violinist Registered User

    تاریخ عضویت:
    ‏1 آپریل 2004
    نوشته ها:
    1,275
    تشکر شده:
    3
    محل سکونت:
    Netherlands
    خوب نکته مهم همینجاست، من میخوام کدم با php4 بالا بیاد. CLASS مشکلی نداره و پیام خطایی که داده میشه که معنیش اشاره به متدی از کلاس که تعریف نشده هست از اینه که در پست اول هم گفتم سشن ها در فرواخوانی دوم به بعد از بین میرن و عملا آبجکت من که سشن هست از بین میره یعنی ->
    PHP:
    $_SESSION['cart']->AddItem(1'apple''500''2')
    در فراخوانی اول یعنی اگه کوکی ها پاک شده باشن و سشن هم تشکیل نشده باشه در فرواخوانی اول این متد کار میکنه اما در فراخوانی دوم که سشن ها به علت نامعلوم!!!! پاک میشن طبعا متد هم که آبجکتش سشن هست و پاک شده پیدا نخواهد شد و پیام خطای مذکور مشاهده میشه.

    حالا من سوالم اینه چرت تو لوکال هیچ مشکلی نیست اما تو سرور سشن ها از بین میره؟ من ini_get_all رو امتحان کردم حداقل در تنظیمات session لوکال و سرور با هم یکسان بودند...

    دوستان اگه نظری دارند بی صبرانه منتظرم.
     
  7. boxilink
  8. saeed_violinist

    saeed_violinist Registered User

    تاریخ عضویت:
    ‏1 آپریل 2004
    نوشته ها:
    1,275
    تشکر شده:
    3
    محل سکونت:
    Netherlands
    any suggesstions?
     
  9. Behzad1984

    Behzad1984 کاربر تازه وارد

    تاریخ عضویت:
    ‏14 جولای 2007
    نوشته ها:
    13
    تشکر شده:
    0
    محل سکونت:
    Tehran, Iran
    من یک عرض بی ربطی دارم، لزومی ندارد که session_start را در داخل If
    قرار دهید.

    صریحاً بنویسید session_start.
     
  10. saeed_violinist

    saeed_violinist Registered User

    تاریخ عضویت:
    ‏1 آپریل 2004
    نوشته ها:
    1,275
    تشکر شده:
    3
    محل سکونت:
    Netherlands
    امتحان کردم تاثیری نداشت
    حتی
    PHP:
     ini_set('session.auto_start'1
    به هرحال نتیجه اینه که با تعویض صفحه اول به دوم (مهم نیست کدوم صفحه رو بیاری) سشن از بین میره در نتیجه
    PHP:
    $_SESSION['cart'] = new CLS_CART();
    هم غیر معتبر میشه و اون پیام لعنتی صادر.

    حالا به نظر شما دوستان با تجربه پاک شدن سشن چه دلیلی میتونه داشته باشه؟!
     
  11. saeed_violinist

    saeed_violinist Registered User

    تاریخ عضویت:
    ‏1 آپریل 2004
    نوشته ها:
    1,275
    تشکر شده:
    3
    محل سکونت:
    Netherlands
    دوستان من هنوز مشکل رو دارما!