مرجع تخصصی برنامه نویسان

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

کاربر سایت

AmirGhasemi

عضویت از 1392/02/25

استفاده از Session در لایه های دیگر پروژه

  • دوشنبه 9 اردیبهشت 1398
  • 14:43
تشکر میکنم

سلام دوستان

من پروژه ام را بصورت چندلایه نوشته ام.

لایه Web  بنده در واقع مربوط به مدیریت Api  هاست و در اونجا سیشن دارم که MemberID  را می گیرم و تا اینجا هم مشکلی وجود ندارد.

مشکل انجایی است که من می خواهم در یک لایه دیگر مقدار MemberID  را بگیرم و اینجا مقدار Session  برابر null  است!!!! یعنی به محض رفتن به یک لایه ی دیگر انگار سیشن اصلا مقدار نگرفته!!

من هم نمی خواهم که در کانستراکتور ورودی لایه، MemberID  را پاس بدم!

حالا دستم به دامن همه تون!!!

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

پاسخ های این پرسش

تعداد پاسخ ها : 7 پاسخ
کاربر سایت

ایمان مدائنی

عضویت از 1392/01/20

  • دوشنبه 9 اردیبهشت 1398
  • 20:36

سلام 

چطوری دریافت میکتید ؟ باید از httpcontext بگیرید سشن رو تا مقدار داشته باشه

کاربر سایت

AmirGhasemi

عضویت از 1392/02/25

  • سه شنبه 10 اردیبهشت 1398
  • 07:42

سلام بر ایمان عزیز ما

والا یک متد لاگین دارم در یک لایه که اطلاعات کاربر ورودی را می فرستم به اون و اطلاعات لازم را در System.Web.HttpContext.Current.Session می گذارم

ولی در لایه های دیگه اصلا بهش دسترسی ندارم یعنی مقدار ان را null  بر می گرداند. کل پروژه ام داره بهم می ریزه!!!!

کاربر سایت

ایمان مدائنی

عضویت از 1392/01/20

  • سه شنبه 10 اردیبهشت 1398
  • 08:13
از چه الگویی استفاده کردید که لاگین در یک لایه دیگه است ؟ اینکار صحیح نیست ، لاگین باید در لایه خود وب باشه چون در وب مورد استفاده است مگر معماری SOA باشه
کاربر سایت

salman_b

عضویت از 1396/02/18

  • سه شنبه 10 اردیبهشت 1398
  • 14:42

سلام

آقا اگه از onion استفاده کردی و domain و AppService و این داستانا داری پس حتما باید یه دیکشنری singleton برای caching استفاده کنی و session رو از اونجا بخونی.

(دیتابیس مناسب اینکار هم redis هستش که اگه معماریت توزیع شده نیست به کارت نمیاد.)

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

اگه هم غیر از این میخوای انجام بدی معماریت ایراد داره چون راه حلی رو که مختص وب هستش و چسبیده به لایه ASP.Net WebApi رو به صورت یک dependency محض پخش میکنی تو پروژه! که خب این کار هدف هیچ Clean Architecture نیستش.

کاربر سایت

AmirGhasemi

عضویت از 1392/02/25

  • چهارشنبه 11 اردیبهشت 1398
  • 07:40

سلام بر دوستان عزیزتر از جان

بله شما درست می فرمایید. الان که دارم با خواندن نوشته های شما بزرگواران بیشتر فکر می کنم می بینم من اصلا سشن را در لایه ی دیگر که اصلا http  نیست ایجاد می کنم لذا نباید هم بشناسم.

لذا باید تغییر رویه بدم و اصلاحاتی انجام بدم.

ممنون از راهنمایی دوستان عزیز. پس از انجام مورد، حتمن در همین تاپیک، نتیجه را خدمت عزیزان اعلام خواهم کرد.

کاربر سایت

AmirGhasemi

عضویت از 1392/02/25

  • چهارشنبه 11 اردیبهشت 1398
  • 11:24

سلام مجدد بر دوستان

آقا نمی شود که نمی شود! گاهی دعا نکرده میشود ها!! اما این بار باز نشد.

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

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

لطفا راهنمایی فرمایید

کاربر سایت

salman_b

عضویت از 1396/02/18

  • پنجشنبه 12 اردیبهشت 1398
  • 19:59

اینطوری اصل DIP نقض میشه خب امیر جان

باید حتما IPrincipal رو جابه‌جا کنی و توی IOC هم IPrincipal درخواست جاری رو پاس بدی.

کاربرانی که از این پست تشکر کرده اند

هیچ کاربری تا کنون از این پست تشکر نکرده است

اگر نیاز به یک مشاور در زمینه طراحی سایت ، برنامه نویسی و بازاریابی الکترونیکی دارید

با ما تماس بگیرید تا در این مسیر همراهتان باشیم :)