PDA

View Full Version : مشكل Session ها



بانوآفتاب
سه شنبه 05 مهر 1390, 10:32 صبح
سلام
ميخواستم ببينم براي نگهداري يك سري از اطلاعات هنگام ورود به سايت علاوه بر Session از چه چيزهاي ديگه اي ميشه استفاده كرد
من وقتي كاربر login ميكنه UserId اون رو توي يه Session نگه ميدارم و هر جاي توي برنامه بخوام از اين Session ميخونم، حالا مشكل اينجاست كه وقتي سر يه سيستم با چند تا User ، لاگين ميكنند اين Session مال آخرين كاربري كه لاگين كرده، آيا ميشه از Session براي اين كار استفاده كرد يا نه ، اگه نه پس از چي ميشه استفاده كرد اگر آره پس مشكل كار از كجاست و چطور ميشه حلش كرد؟
ممنون

Saman Hashemi
سه شنبه 05 مهر 1390, 11:09 صبح
هر کاربری که لاگین میکنه یه session منحصر به فرد داره مگر اینکه شما کار خاصی انجام داده باشید...!
در مورد Membership تحقیق کنید.

بانوآفتاب
سه شنبه 05 مهر 1390, 13:11 عصر
نميدونم منظور من رو متوجه شديد يا نه ، مشكل من جايي كه كاربر IE8 رو باز ميكنه
بعد ميره تو تب اول لاگين ميكنه با يوزر1 بعد يه تب جديد باز ميكنه توي اون لاگين ميكنه با يوزر2
حالا اتفاقي كه ميفته اينه كه ديگه تو هر صفحه اي كه بره از هر كدوم از اون دوتا تب شده يوزر2

Saman Hashemi
سه شنبه 05 مهر 1390, 13:32 عصر
خوب این یه مشکل از برنامه شماست وقتی کسی در سایت لاگین میکنه و تا زمانی session زنده است باید دیگه اجازه لاگین مجدد بهش ندید...!

aminghaderi
سه شنبه 05 مهر 1390, 16:58 عصر
آيا ميشه از Session براي اين كار استفاده كرد يا نهخیر برای بحث لاگین به دلیل ایجاد رخداد Server Time Out که باعث منقضی شدن Session بعد از گذشت 5 تا 10 دقیقه می شه ، امکان پذیر نیست.
باید سشن رو با حالت های دیگر "نگداری حالت" :کوکی ، دیتابیس و... میکس کرد تا بشه حالت لوگین رو شبیه سازی کرد.
مشکل فقط همین جا نیست ، مباحث امنیتی هست که در این سناریو گریبانگیر شما خواهد شد مثلا، اگر از کوکی کمک بگیرید امکان حمله XSS هست و باید براش راه حلی در نظر گرفت و مشکلات بسیاری دیگر.
البته که کار نشد نداره ولی با تحلیل بسیار قوی و طرح الگریتم امن.
اما راهی که دوستمون گفتند :

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

مشكل من جايي كه كاربر IE8 رو باز ميكنه
بعد ميره تو تب اول لاگين ميكنه با يوزر1 بعد يه تب جديد باز ميكنه توي اون لاگين ميكنه با يوزر2
حالا اتفاقي كه ميفته اينه كه ديگه تو هر صفحه اي كه بره از هر كدوم از اون دوتا تب شده يوزر2 در این باره به نظر من هم مشکل فقط از تحلیل و طراحی برنامه شما بوده.

موفق باشی.

محمد متاله
سه شنبه 05 مهر 1390, 20:51 عصر
اگر کاربری با IE به سایتتان login کند به ازای هر تعداد Tab ی که باز می کند IIS برای آن فقط یک Session ID در نظر می گیرد یعنی فرض می کند که تمامی آنها یک کاربرند و برای آنها Session ID جداگانه ای در نظر نمی گیرد اما اگر برای ورود به سایتتان از چند برنامه IE استفاده کنید متوجه می شوید که عموما به ازای هر بار برنامه که باز می کیند و وارد ساییتان می شوید یک Session ID جدید در نظر می گیرد این مشکل را با firefox که بررسی کرده ام وجود ندارد یعنی در firefox به ازای هر تب یک Session ID جداگانه ساخته می شود تا متغیرهای مربوط به هر کدام از این کاربران با هم conflict نداشته باشد

برای به دست آوردن SessionID هر کاربر از HttpContext.Current.Session.SessionID می توانید استفاده کنید البته متغیرهای دیگری هم در کلاس HttpContext.Current.Session هست که بعضا به درد بخورند اگر واقعا برایتان حیاتی هست که کاربران سایتتان با یک مرورگر به عنوان چنیدین کاربر بتوانند وارد شوند (البته این کار واقعا غیر منطقی می باشد و اصولا صحیح نیست) می توانید به ذخیره سازی session در url کاربران به شکل query String و به شکل Hash شده فکر کنید
با این تفاسیر فکر کنم جوابتان را گرفته باشید

بانوآفتاب
چهارشنبه 06 مهر 1390, 11:17 صبح
از همگي ممنون، خيلي لطف كردين
من نميخوام كه با يه مرورگر چندتا لاگين كنند بلكه ميخوام اجازه ندم كه بتونن اين كار رو بكنند

Saman Hashemi
چهارشنبه 06 مهر 1390, 12:54 عصر
بهترین شیوه که هم امن و هم راحت Membership یه کم تحقیق کنید ,همه این امکانات و خیلی چیزهای دیگه بهتون میده...!
با بودن این امکانات منطقی نیست که خودتون بنویسید مگر اینکه شیوه خاصی مدنظرتون باشه...!

محمد متاله
چهارشنبه 09 آذر 1390, 21:07 عصر
از همگي ممنون، خيلي لطف كردين
من نميخوام كه با يه مرورگر چندتا لاگين كنند بلكه ميخوام اجازه ندم كه بتونن اين كار رو بكنند

با سلام
خب در این صورت به نظرم بهترین راه استفاده از IP کاربران می باشد که کاربری با چند مرورگر و یا با یک مرورگر اما با تب های مختلف وارد سایتتان شود IP شخص را چک کنید و اگر در حال حاضر شخصی با چنین IP ئی در سایتتان حضور دارد اجازه ورود به وی را ندهید



وقتي سر يه سيستم با چند تا User ، لاگين ميكنند اين Session مال آخرين كاربري كه لاگين كرده، آيا ميشه از Session براي اين كار استفاده كرد يا نه ، اگه نه پس از چي ميشه استفاده كرد اگر آره پس مشكل كار از كجاست و چطور ميشه حلش كرد؟
ممنون


Session متغیری است که در IIS برای هر شخص به طور جداگانه ایجاد شده و با SessionID به هر کدام از آنها اختصاص داده می شود اما Application متغیری است که در IIS برای کل سایت و برای تمامی کاربران یکبار ایجاد می شود