برگزیده های پرشین تولز

مشکل با session و class

saeed_violinist

Registered User
تاریخ عضویت
1 آپریل 2004
نوشته‌ها
1,275
لایک‌ها
3
سن
40
محل سکونت
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 از دست میره.

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

firebird

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

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

saeed_violinist

Registered User
تاریخ عضویت
1 آپریل 2004
نوشته‌ها
1,275
لایک‌ها
3
سن
40
محل سکونت
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 کردن این فایل یک آرایه ساده برای نام صفحه گذاشتم که فکرنکنم مشکل ساز باشه....
 

Behzad1984

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


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

saeed_violinist

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

در فراخوانی اول یعنی اگه کوکی ها پاک شده باشن و سشن هم تشکیل نشده باشه در فرواخوانی اول این متد کار میکنه اما در فراخوانی دوم که سشن ها به علت نامعلوم!!!! پاک میشن طبعا متد هم که آبجکتش سشن هست و پاک شده پیدا نخواهد شد و پیام خطای مذکور مشاهده میشه.

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

دوستان اگه نظری دارند بی صبرانه منتظرم.
 

Behzad1984

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

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

saeed_violinist

Registered User
تاریخ عضویت
1 آپریل 2004
نوشته‌ها
1,275
لایک‌ها
3
سن
40
محل سکونت
Netherlands
امتحان کردم تاثیری نداشت
حتی
PHP:
 ini_set('session.auto_start', 1)

به هرحال نتیجه اینه که با تعویض صفحه اول به دوم (مهم نیست کدوم صفحه رو بیاری) سشن از بین میره در نتیجه
PHP:
$_SESSION['cart'] = new CLS_CART();

هم غیر معتبر میشه و اون پیام لعنتی صادر.

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