PDA

View Full Version : حرفه ای: 0 شدن $_SESSION پس از ورود



parnian~parnian
پنج شنبه 16 دی 1395, 11:27 صبح
با سلام خدمت دوستان عزیزم


یه سوال بسیار تخصصی و فوری دارم ازتون

من یه وب سایت دارم که شامل قسمت های زیادیی هست که با کاربر در تمکاسه و هم اینکه درگاه پرداخت داره

وقتی کاربر ها لاگین میکنن من id هر کاربری که لاگین میکنه رو توی یه سشن ذخیره میکنم و تو کل سایت ازش استفاده میکنم

حالا به یه مشکلی بسیارررررررررررررررر بزرگ برخورد کردم اینکه حین کار برای برخی از افراد id کاربر رو توی جدول های مختلف 0 میزنه!
الان توی پرداخت های درگاه به مشکل برخورد کردیم و تو قسمت های دیگه هم همین طور

سوال من اینه

1: چرا این اتفاق میوفته ؟ تحت چه شرایطی سشن خود به خود 0 میشه؟ من چطوری میتونم جلوی این کارو بگیرم؟
2: آیا راه ایمن تری برای ذخیره id کاربر لاگین کرده هست بجز سشن؟





ممنونم دوستان اگ پاسخ بدین ....

parnian~parnian
یک شنبه 19 دی 1395, 10:34 صبح
دوستان عزیزم کسی نیست که پاسخ بده ؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟

charcharkh
یک شنبه 19 دی 1395, 13:35 عصر
سشن رو کجا میزنی ؟
آیا واقعا مقدار داخلش میریزی ؟
سشن رو کجا استارت میکینی ؟
یه خلاصه ای از کدهات لاقل میذاشتی !!!

parnian~parnian
دوشنبه 20 دی 1395, 17:56 عصر
ببینین کدهام خیلی پیچیدست .. کدهای یه وب سایت بزرگه

در مورد همه کاربرا درسته 0 نمیشه ولی توی بعضی از شرایط که متاسفانه من نمیدونم چه شرایطی پیش میاد سشن خود بخود 0 میشه !!!!!!!!!! و توی درگاه به مشکلات بزرگی برخورد کردیم کاربر پول میریزه موفقیت امیزه ولی id اش رو 0 میزنه!

اگه راهنمایی کنین ممنون میشم

numberone1
دوشنبه 20 دی 1395, 19:48 عصر
ببینین کدهام خیلی پیچیدست .. کدهای یه وب سایت بزرگه

در مورد همه کاربرا درسته 0 نمیشه ولی توی بعضی از شرایط که متاسفانه من نمیدونم چه شرایطی پیش میاد سشن خود بخود 0 میشه !!!!!!!!!! و توی درگاه به مشکلات بزرگی برخورد کردیم کاربر پول میریزه موفقیت امیزه ولی id اش رو 0 میزنه!

اگه راهنمایی کنین ممنون میشم

سلام

سشن خیلی اتفاق ها ممکنه براش بیوفته
سشن تو حالت پیش فرض توی فایل داخل فولدر temp دخیره میشه اگر سرور تنظیمات امنیتی خاصی داشته باشه یا تنظیمات خاصی برای کش سرور اعمال شده باشه ممکنه سشن پاک بشه
سشن از کوکی هم استفاده میکنه که اونم باز به دامنه و ساب دامنه و ... واکنش های متفاوت ممکنه نشون بده
سشن و میشه تو دیتابیس هم ذخیره کرد که مطمئن ترین حالت و امن ترین راه هست اگر از این حالت استفاده کردی باید کوئری ها رو چک کنی که اجرا میشن کامل یا نه.

plague
سه شنبه 21 دی 1395, 10:07 صبح
اول اینکه روشی که استفاده میکنی برای پرداخت اشتباهه
قبل از اینکه کاربر رو بفرستی بانک چک میکنی اگه لاگین نبود (سشن نداشت ) میفرستیش تو صحه لاگین
بعد قبل از اینکه بفرستیش بانک آیدی کاربر رو با کدتراکنشی که بانک میده بریز تو دیتابیس
وقتی پرداخت انجام میشه و برمیگرده کاربر از بانک , اون کد تراکنش رو هم باهاش برمیگردونه بانک
اونجا تو دیتبایس چک میکنی کد این کد تراکنش ماله کدوم کاربره و پول رو میریزی به حساب اون کاربر
نه اینکه فرض رو بزاری به اینکه کاربر هنوز لاگینه بعد از پرداخت پول

هر سشن 2 تا فایل فیزیکی داره
یکیش روی سرور قرار میگیره
یکیش هم یه کوکیه که روی کامپیوتر کاربر ذخیره میشه
این فایل ها هم یه تاریخ انقضا دارن که بعد از اون تاریخ دیگه معتبر نیستن
برای اینه که شما امروز لاگین میکنی تو یه سایت بعد فردا میری میبینی لاگین نیستی

همچنین اگه اتفاقی بیفته و این فایل ها پاک بشن از روی سرور یا کامپیوتر کلاینت شما باز لاگ اوت میشی


اگه جای یاز برنامه که از سشن استفاده میشه (مثلا برای سبد خرید ) از session_destroy استفاده کرده باشی همه سشن ها از بین میره از جمله سشن آیدی/لاگین

شما میتونی سشن ها رو توی دیتبایس بریزی بجای فایل روی سرور اینجوری امنیتشون بیشتر میشه در ازای پایین اومدن جزئی سرعت و همچنین دیگه فایل فیزیکی در کار نیست که اتفاقی براش بیفته

parnian~parnian
سه شنبه 21 دی 1395, 13:57 عصر
واقعا ممنون از توضیحاتتون خیلی جامع و عالی بود .............


یعنی منظور شما اینه که من وقتی کاربر لاگین میشه ، سشن بهش بدم بعد همون موقع اون سشن رو توی یه جدول توی پایگاه داده ذخیره کنم؟ یعنی به ازای هر کاربر یه سشن ؟بعد چطوری ازش استفاده کنم دسترسی پیدا کنم به بهش ؟


شما میتونی سشن ها رو توی دیتبایس بریزی بجای فایل روی سرور اینجوری امنیتشون بیشتر میشه در ازای پایین اومدن جزئی سرعت و همچنین دیگه فایل فیزیکی در کار نیست که اتفاقی براش بیفته


این بخش رو درست متوجه نمیشم شرمنده اگ توضیح بدین ممنون میشم .......

plague
سه شنبه 21 دی 1395, 20:57 عصر
سشن مثل یه فایل متنیه که یه سری داده توش ذخیره میشه ... تو این مثال شما آیدی ها رو توش ذخیره میکنی
بعدا اسکریپت این فایل ها رو میخونه و از دیتایی که توشه استفاده میکنه
حالا به جای اینکه تو فایل بریزی میتونی تو دیتبایس بریزی جچوریش بستگی به این داره که از چه سیستمی / روشی برای کد نویسی استفاده میکنی
مثلا اگه از فریم ورک خاصی استفاده میکنی تو تنظیمات معمولا یه گزینه داره که راحت سویچ میکنی بین فایل و دیتبایس
وگرنه پروسه نسبتا پیچیده ای باید داشته باشه که من هیچوقت باهاش سروکله نزدم باید سرچ کنی تو نت ببینی راهش چیه

parnian~parnian
سه شنبه 21 دی 1395, 21:46 عصر
یکمممممممممممممم پیچیده شد!!!!! ولی متاسفانه من مجبورم این کارو بکنم چون باید درصد خطای کارم بیاد پایین ممنون که راه رو بهم نشون دادین ......... اگه چیزی دستگیرم شد اینجا میذارم تا استفاده کنین همه دوستان ........

فقط اینکه به صورت خودکار توی فایل ذخیره میکنه و میخونه دیگه؟ چون ما به عنوان برنامه نویس هیچ کاری نمیکنیم ... ولی من الان باید خودم این بین دخالت کنم ؟

plague
چهارشنبه 22 دی 1395, 08:09 صبح
بله به صورت دیفالت توی فایل ذخیره میشه توی پوشه tmp همونجوری که دوستان گفتن
شما باید این رو بیخیال بشی و با استفاده از دیتبایس این عملکرد رو شبیه سازی کنی
خیلی ساده بخام بگم باید تو دیتبایس یه ردیف ثبت کنی به ازای هر سشن و توی اون ردیف اطلاعاتی که مد نظرته رو سریال و ذخیره کنی (مثلا آیدی کاربر)


id , session_id , data
1 , 23243435454 , {"user_id":1}
2 , 89243432345 , {"user_id":2 , "last_active":1232135454}

بعد سشن آیدی اون ردیف سشن رو که یه کد پیچیده شناسایی هستش رو میزاری تو یه کوکی بریزی رو کامپیوتر کاربر
بعد وقتی کاربر میاد تو سایت کوکیش رو میخونی و آیدی سشن رو در میاری بعد میری تو دیتابیس اون سشن رو میخونی و اطلاعات مدنظرت رو در میاری

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

parnian~parnian
چهارشنبه 22 دی 1395, 09:14 صبح
هنمچنین این چیزیه که برنامه نویس نباید بهش فکر کنه و تمرکز بزاره روش .... برای همین از فریم ورک استفاده میکنن خیلی ها چون ترتیب این اضافه کاری ها رو میده

یعنی کل عملیاتی که شما اینجا توضیح دادین رو فریم ورک شبیه سازی میکنه؟ و من از یه فریم ورک استفاده کنم ؟

plague
چهارشنبه 22 دی 1395, 11:59 صبح
اگه بخای از فریم ورک استفاده کنی باید همه کد هات رو ببری تحت اون فریم ورک و با دستورات فریم ورک بنویسی یعنی کل کدهات رو باید بازنویسی کنی
اینجوری نیست که فریم ورک رو بیاری بندازی وسط کدهای فعلیت و مشکل حل بشه (حداقل با سطح اطلاعات شما نمیتونی )

فریم ورک یه سری خدمات به شما میده به شرطی که از قوانینش پیروی کنی و کدهات رو در محیطش و اونجوری که فریم ورک میگه بنویسی

یجورایی کار از کار این پروژه گزشته
سعی کن بری یه فریم ورک یاد بگیری و از حالا خواستی پروژه اجرا کنی با فریم ورک بنویسی بعدش اگه وقت/حالش رو داشتی این پروژت رو از اول با فریم ورک باز نویسی کن




از این حرفا که بگزریم خیلی سایت ها دارن از همون روش فایل استفاده میکنن و مشکلی ندارن
شما بجای اینکار میتونی منطق برنامت رو درست بنویسی و تاریخ انقضای سشنت رو کمی ببری بالا تر تا این مشکل پیش نیاد براتون