View Full Version : Session اي كه Expire نشه
IFA_USER
سه شنبه 07 اردیبهشت 1389, 10:48 صبح
سلام
من يه متغير دارم كه تو صفحه اول نرم افزار (web application) پر مي شه و مي خوام در تمام صفحات سايت از اون استفاده كنم . من از session استفاده كرد زمان (TimeOut ) را هم تنظيم كردم با 120 اما باز هم session از دست مي ره(Expire). آيا كسي راه جايگزيني مي شناسه . ممنون مي شم كمك كنيد .
با تشكر
IFA
maxpayn2
سه شنبه 07 اردیبهشت 1389, 12:59 عصر
مقدار متغیر رو از دیتابیس یا یک فایل بخون
محمدامین شریفی
سه شنبه 07 اردیبهشت 1389, 13:46 عصر
سلام
من يه متغير دارم كه تو صفحه اول نرم افزار (web application) پر مي شه و مي خوام در تمام صفحات سايت از اون استفاده كنم . من از session استفاده كرد زمان (TimeOut ) را هم تنظيم كردم با 120 اما باز هم session از دست مي ره(Expire). آيا كسي راه جايگزيني مي شناسه . ممنون مي شم كمك كنيد .
با تشكر
IFA
اگر مقدار مربوط به یک کاربر خواص می باشد آنرا در کوکی ذخیره کن.
اگر مقدار مربوط به تنظیمات وب می باشد و در تمام برنامه ثابت و بدون تغییر است آنرا در web.config بزار.
اگر مقدار مربوط به لوگین هست، آنرا در سشن (یا کوکی) ذخیره کن.
در غیر اینصورت مقدار را در DB بذار.
IFA_USER
سه شنبه 07 اردیبهشت 1389, 15:17 عصر
به نام خدا
اگر مقدار مربوط به یک کاربر خواص می باشد آنرا در کوکی ذخیره کن.
اگر مقدار مربوط به تنظیمات وب می باشد و در تمام برنامه ثابت و بدون تغییر است آنرا در web.config بزار.
اگر مقدار مربوط به لوگین هست، آنرا در سشن (یا کوکی) ذخیره کن.
در غیر اینصورت مقدار را در DB بذار.
مروط به لاگين است . در حقيقت اطلاعات كاربري رو كه لاگين كرده در سشن نگه ميدارم. اما سشن من زودتز از موعد خودش اكسپاير مي شه. حالا هم قصد دارم از رويداد Session_End كه در Global.asax قرار داره و هر موقع كه session خاتمه پيدا مي كنه اجرا ميشه استفاده كنم . اما نمي دونم چه طور اطلاعات سيشن رو تو سشن جديد بريزم. يا يه چيزي مثل اين .
متشكرم
mehdi.mousavi
سه شنبه 07 اردیبهشت 1389, 15:42 عصر
اما سشن من زودتز از موعد خودش اكسپاير مي شه. حالا هم قصد دارم از رويداد Session_End كه در Global.asax قرار داره و هر موقع كه session خاتمه پيدا مي كنه اجرا ميشه استفاده كنم . اما نمي دونم چه طور اطلاعات سيشن رو تو سشن جديد بريزم. يا يه چيزي مثل اين . متشكرم
سلام.
Expire شدن Session میتونه به چند عامل بستگی داشته باشه. یکی از این عوامل، Recycle شدن Application Pool هستش. اگر سرور دست خودتون هستش، می تونید این مقدار رو در IIS افزایش بدید تا Application Pool شما دیرتر Recycle بشه. (اگر چه این ایده خیلی خوبی نیست).
یکی دیگه از دلائلی که ممکنه Session زودتر از زمان مورد نظر شما Expire بشه، اجرای برنامه در Web Farm ها هستش. برخی از Hosting های بزرگ، برنامه ها رو در Web Farm ها اجرا می کنن و این باعث میشه تا وقایع در Runtime طبق انتظار شما رخ نده. از اونجاییکه هر ماشین machineKey متفاوتی داره، شما باید machineKey خودتون رو در web.config تعیین کنید، تا به سیستمهای موجود در farm بفهمونید که باید اطلاعات رو توسط این کلید encrypt کنن (که البته از این مساله در Forms Authentication استفاده میشه).
خلاصه کنم، بهترین راه، اگر به سرور دسترسی ندارید، استفاده از Session State Manager دیگه ای غیر از InProc هستش. بدین ترتیب که اطلاعات Session در بانک جداگانه ای ذخیره میشه، و این اطلاعات، پس از Expire شدن App Pool مجددا توسط ASP.NET runtime بطور خودکار از بانک load میشه، در نتیجه شما حس نخواهید کرد که Session مورد نظر Expire شده.
برای اینکار، توی web.config خودتون، باید عنصر مربوط به config کردن sessionState رو قرار بدید:
<sessionState mode="SQLServer" allowCustomSqlDatabase = "true" sqlConnectionString="data Source=whatever;database=whatever;user id=whatever;password=whatever" cookieless="false" timeout="120"/>
این المنت رو باید زیر المنت system.web قرار بدید...
بدین ترتیب، اطلاعات Session در بانک ذخیره خواهد شد و شما دیگه نگران از دست دادن این اطلاعات زودتر از موعد مورد نظر نخواهید بود.
تنها نکته ای که باقی می مونه و باید بهش اشاره کنم اینه که اگر Hosting شما امکان ذخیره اطلاعات Session در StateServer رو براتون فراهم میکنه (که عموما نمیکنن)، این انتخاب اولویت بالاتری نسبت به نگهداری داده ها در بانک داره، چراکه از سرعت بالاتری برخورداره و اطلاعات در حافظه توسط یک NT Service نگهداری و مدیریت میشن.
موفق باشید.
Behrouz_Rad
سه شنبه 07 اردیبهشت 1389, 15:49 عصر
یکی دیگه از دلایل Expire شدن Session ها می تونه به Anti Virus سرور مربوط باشه. وقتی که Anti Virus فایل ها رو Scan می کنه، ممکنه تاریخ Modified اونها رو تغییر بده و در نتیجه باعث بشه که ASP.NET، وب سایت رو Restart کنه که این عمل موجب از بین رفتن Session ها میشه.
موفق باشید.
IFA_USER
سه شنبه 07 اردیبهشت 1389, 16:14 عصر
به نام حق
دوستان از پاسخ ها تون متشكرم
اطلاعات كاربران من تو يه جدول از ديتا بيسه . تو فرم Default.aspx يه session پر مي كردم كه IDكاربر را شامل مي شد ، شناسايي كاربر هم از دوطريق Windows و Login form انجام ميشه . تو تمام صفحات ديگه از همين Session براي اعتبار سنجي استفاده مي كردم. تا به مشكل شرح داده شده برخوردم. حالا به نظر شما راه حل جايگزيني وجود داره . يا اگر مجبورم از Session استفاده كنم كدوم حالت با شرايط من همخواني بيشتري داره . تا برم دنبالش.
متشكرم
Behrouz_Rad
سه شنبه 07 اردیبهشت 1389, 16:17 عصر
به نام حق
دوستان از پاسخ ها تون متشكرم
اطلاعات كاربران من تو يه جدول از ديتا بيسه . تو فرم Default.aspx يه session پر مي كردم كه IDكاربر را شامل مي شد ، شناسايي كاربر هم از دوطريق Windows و Login form انجام ميشه . تو تمام صفحات ديگه از همين Session براي اعتبار سنجي استفاده مي كردم. تا به مشكل شرح داده شده برخوردم. حالا به نظر شما راه حل جايگزيني وجود داره . يا اگر مجبورم از Session استفاده كنم كدوم حالت با شرايط من همخواني بيشتري داره . تا برم دنبالش.
متشكرم
مطمئنی پست برادر موسوی رو خوندی؟!!!
IFA_USER
سه شنبه 07 اردیبهشت 1389, 17:01 عصر
به نام خدا
آره . پس از فرمايش شما يك بار ديگه خوندم.
من چند تا محدوديت دارم .
1.كوكي نبايد استفاده كنم . چون ممكنه كاربر اونو بسته باشه .
2.Table توي Database نبايد بگيرم . (البته تا حد امكان)
3.در تمام فرمهاي تمام پروژه ها از Session استفاده كردم . البته در مد InProc براي همين خيلس برام خوب مي شه اگر بتونم همين session موجود رو يه جوري حفظش كنم.
منظورم از راه حل جايگزين هم اين بود كه اگر نخواهم كلا از Session استفاده كنم ، راه حلي وجود داره .
سپاس
IFA_USER
چهارشنبه 08 اردیبهشت 1389, 10:02 صبح
به نام خدا
من از خير اينكه session رو طوري تعريف كنم كه expire نشه گذشتم.
آيا راه حلي وجود داره كه تو Session_End در global.asax يا يه جاي ديگه به محض expire شدن session ، Session جديدي رو Start كنم .
سپاس
Nightbat
چهارشنبه 08 اردیبهشت 1389, 10:17 صبح
وقتی که Anti Virus فایل ها رو Scan می کنه، ممکنه تاریخ Modified اونها رو تغییر بده
می دونم به بحث ربطی نداره، ولی می شه بگید چرا فایلها رو Modified می کنه ؟
Behrouz_Rad
چهارشنبه 08 اردیبهشت 1389, 11:58 صبح
می دونم به بحث ربطی نداره، ولی می شه بگید چرا فایلها رو Modified می کنه ؟
Modified نمی کنه! تاریخ Modified اونها رو "ممکنه" تغییر بده... چون باید فایل رو باز و بررسی کنه...
محمدامین شریفی
چهارشنبه 08 اردیبهشت 1389, 12:56 عصر
به نام خدا
آره . پس از فرمايش شما يك بار ديگه خوندم.
من چند تا محدوديت دارم .
1.كوكي نبايد استفاده كنم . چون ممكنه كاربر اونو بسته باشه .
2.Table توي Database نبايد بگيرم . (البته تا حد امكان)
3.در تمام فرمهاي تمام پروژه ها از Session استفاده كردم . البته در مد InProc براي همين خيلس برام خوب مي شه اگر بتونم همين session موجود رو يه جوري حفظش كنم.
منظورم از راه حل جايگزين هم اين بود كه اگر نخواهم كلا از Session استفاده كنم ، راه حلي وجود داره .
سپاس
بهترین راه همین هست که آقای موسوی گفتن، یعنی ثبت sessionکاربران در sql
راه حل مشابه استفاده از profile خود ASP.NET است.
به هر حال توی هر دوتاییشون سریال شدن و تغییر sql نیاز است.
حال یک سوال، recycle شدن application pool چقدر طول میکشه و آیا لازم است session ها را در sql ذخیره کرد ؟
به نام خدا
من از خير اينكه session رو طوري تعريف كنم كه expire نشه گذشتم.
آيا راه حلي وجود داره كه تو Session_End در global.asax يا يه جاي ديگه به محض expire شدن session ، Session جديدي رو Start كنم .
سپاس
با true کردن مقدار regenerateExpiredSessionId مشکل حل نمیشه؟
Modified نمی کنه! تاریخ Modified اونها رو "ممکنه" تغییر بده... چون باید فایل رو باز و بررسی کنه...
مهندس راد، امکان دارد چند نمونه از این آنتی ویروس ها را نام ببرید.
mehdi.mousavi
چهارشنبه 08 اردیبهشت 1389, 13:45 عصر
حال یک سوال، recycle شدن application pool چقدر طول میکشه و آیا لازم است session ها را در sql ذخیره کرد ؟
سلام.
App Pool ها تحت چند حالت Recycle میشن:
اگر برای مدت زمان 20 دقیقه درخواستی به Web App نرسه.
اگر Worker Process ظرف 30 ثانیه نتونه دستور Ping رو پاسخ بده (در واقع این یه Safe Guard هست برای اینکه IIS مطمئن بشه که Worker Process داره درست کار میکنه و Hang نکرده).
اگر 5 خطای غیر قابل بازگشت برای Worker Process رخ بده، اون Process بطور خودکار Terminate میشه و در نتیجه Session ها نیز از بین میرن.
هر 1740 دقیقه Worker Process بطور خودکار Recycle میشه.
اینهایی که اسم بردم، حالتهای پیش فرض هستن و همگی قابل تغییر. البته خوب، هر Hosting ای میتونه بسته به نیاز خودش، قید میزان حافظه مصرفی، تعداد درخواستها و CPU Usage رو به این شرایط اضافه کنه.
موفق باشید.
IFA_USER
چهارشنبه 08 اردیبهشت 1389, 14:13 عصر
به نام خدا
سلام
فكر كنم regenerateExpiredSessionId به توجه به توضيحات تو msdn اين قابليت رو فراهم مي كنه كه بتوان يه sessionID رو دوباره بعد از expire شدن تعريف كرد .
اگر كسي اطلاعات بيشتري داره ممنون مي شم برامون بزاره
در پناه حق
Behrouz_Rad
چهارشنبه 08 اردیبهشت 1389, 14:43 عصر
مهندس راد، امکان دارد چند نمونه از این آنتی ویروس ها را نام ببرید.
اگر درست خاطرم باشه، Norton چنین رفتاری داشت.
bahar_1984_n
یک شنبه 01 اردیبهشت 1392, 18:42 عصر
سلام.
App Pool ها تحت چند حالت Recycle میشن:
اگر برای مدت زمان 20 دقیقه درخواستی به Web App نرسه.
اگر Worker Process ظرف 30 ثانیه نتونه دستور Ping رو پاسخ بده (در واقع این یه Safe Guard هست برای اینکه IIS مطمئن بشه که Worker Process داره درست کار میکنه و Hang نکرده).
اگر 5 خطای غیر قابل بازگشت برای Worker Process رخ بده، اون Process بطور خودکار Terminate میشه و در نتیجه Session ها نیز از بین میرن.
هر 1740 دقیقه Worker Process بطور خودکار Recycle میشه.
اینهایی که اسم بردم، حالتهای پیش فرض هستن و همگی قابل تغییر. البته خوب، هر Hosting ای میتونه بسته به نیاز خودش، قید میزان حافظه مصرفی، تعداد درخواستها و CPU Usage رو به این شرایط اضافه کنه.
موفق باشید.
بنده به سرور مستقیم دسترسی دارم . ه.ه تنظیمات درسته ولی من نمیدونم برای چی هر چند ثانیه همه سشن ها از بین میره.من منظورتون رو از 5 خطای غیر بازگشت نفهمیدم
البته من ویندوزم 2008 و iis7 ولی یه مدت ویندوز سرور 2003 نصب بود مشکلی با سشن ها نداشتم ولی به محض نصب ویندوز سرور 2008 دوباره مدام سشن ها از بین میرن
وقتی تنطیمات رو بر روی state server میذارم خطا میده بناچار بررویinproc گذاشتم
میشه لطف کنید تنظیمات سرور رو برای state server و نیز تنظیمات وب کانفیگ رو برای این گزینه بذارید
چون من برای سایت باید پرداخت املاین داشته باشم و چون پرداخت آنلاین برای نگهداری مقادیر از سشن استفاده میکنه من نیاز مبرم دارم تا این مسله حل بشه
ممنونم و تشکر
Behrouz_Rad
دوشنبه 02 اردیبهشت 1392, 06:47 صبح
بنده به سرور مستقیم دسترسی دارم . ه.ه تنظیمات درسته ولی من نمیدونم برای چی هر چند ثانیه همه سشن ها از بین میره.من منظورتون رو از 5 خطای غیر بازگشت نفهمیدم
البته من ویندوزم 2008 و iis7 ولی یه مدت ویندوز سرور 2003 نصب بود مشکلی با سشن ها نداشتم ولی به محض نصب ویندوز سرور 2008 دوباره مدام سشن ها از بین میرن
وقتی تنطیمات رو بر روی state server میذارم خطا میده بناچار بررویinproc گذاشتم
میشه لطف کنید تنظیمات سرور رو برای state server و نیز تنظیمات وب کانفیگ رو برای این گزینه بذارید
چون من برای سایت باید پرداخت املاین داشته باشم و چون پرداخت آنلاین برای نگهداری مقادیر از سشن استفاده میکنه من نیاز مبرم دارم تا این مسله حل بشه
ممنونم و تشکر
از Session استفاده نکنید. از Cookie استفاده کنید.
موفق باشید.
reza69
سه شنبه 06 خرداد 1393, 13:32 عصر
سلام به همه
منم الان چنین مشکلی دارم بعد از اینکه صفحه ریلود میشه سسشن از بین میره.
vBulletin® v4.2.5, Copyright ©2000-1404, Jelsoft Enterprises Ltd.