PDA

View Full Version : session_end



arsolati
سه شنبه 06 اسفند 1387, 09:57 صبح
سلام

من در این تابعsession_end کدی نوشتم که از دیتابیس IP های موجود(کاربران آنلاین) رو پاک می کنه ولی هیچ وقت این تابع برای من صدا زده نمیشه!حتی به اندازه ی Timeout هم صبر کردم ولی نشد. نکته ی مهم اینه که من در localhost خودم که سایتم رو تست می کنم درست عمل می کنه ولی وقتی سایتم رو در هاستم آپلود می کنم این مشکل پیش میاد و اصلا session_end فراخوانی نمیشه!!

ممنون

Chabok
چهارشنبه 07 اسفند 1387, 15:22 عصر
با سلام

اصولاً Session ها بر مبنای Cookie ساخته می شود . یعنی برای یک سشن ، یک کوکی متناظر با آن در سیستم کلاینت ایجاد می شود که برای رجوع مجدد با یکدیگر تطابق داده شود و سرور بتونه بفهمه کدوم سشن مال کی است .

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

ابتدا این پست را بخوانید
http://barnamenevis.org/forum/showpost.php?p=671078&postcount=3


همان طوری که قبلاً هم بحث شده ظاهرا روشی قطعی برای فهمیدن بسته شدن صفحه مرورگر . یا دیسکانکت شدن و یا هر رویداد دیگری که در سمت کلاینت رخ میدهد کشف نشده .

زیرا فعلا بستر وب اجازه چنین امکاناتی را نمیدهد .
سرور فقط می تواند موقع ارسال درخواست کاری انجام دهد .

و همانطور که میدانیم موقع دیسکانکت شدن ، بستن صفحه یا هر رویدادی دیگر که سمت کلاینت انجام می شود هیچ درخواستی به سرور ارسال نخواهد شد که موقعیت کلاینت را گزارش دهد .

و نکته دیگر اینکه :
شما موقعی که درخواستی برای مشاهده یک صفحه ارسال می کنید سرور به درخواست شما پاسخ داده و مثلا صفحه ی شما را نمایش میدهد .
از این جا به بعد این چیزی که در حال نمایش به شماست یک مشت کد مُرده است .
حالا شما می خواهید صفحه را ببندید ; ببندید .
می خواهید دیسکانکت شوید ; خوب بشوید .
می خواهید تا ابد صفحه را باز نگه دارید .

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

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


در مورد Session ها و تطابق آن با کاربران نیز همین مسایل ذکر شده صادق است .

یعنی تا درخواستی به سرور ارسال نشود و کلاینت با سرور تماسی برقرار نکند سرور هیچ عملی در رابطه با Session ها انجام نمیدهد .

حال در واقع رویداد SessionEnd فقط در حالتی رخ میدهد که :
اولاً Session مربوط به شما روی سرور ساخته شده باشد . یعنی بار اولی نباشد که مراجعه می کنید .
و حالا بعد از انقضای مدت Session باز به سرور مراجعه کنید .
دراین صورت است که سرور مشخصات Session شما را از روی کوکی شما میشناسد و بررسی می کند .
و اگر زمان انقضای آن سپری شده باشد این رویداد را اجرا می کند .

یعنی این رویداد هیچ گاه خود به خود اجرا نمی شود و تا زمانی که به سرور مراجعه نکنید نمی توان تشخیص داد که کدام سشن مال کدام کاربر است تا سرور عمل مورد نظر را انجام دهد .

امیدوارم متوجه منظورم شده باشید .
موفق باشید . خدانگهدار