PDA

View Full Version : گفتگو: سناریو 2 - چگونگی نگهداری سبد خرید در پروژه فروشگاه آنلاین کتاب



علیرضا مداح
چهارشنبه 15 آبان 1387, 17:24 عصر
سلام دوستان عزیز،
پیش از آغاز فعالیت ، تاپیک "آغاز پیاده سازی طرح ارتقاء سطح علمی - ذکر جزییات (http://www.barnamenevis.org/forum/showthread.php?t=120541)" را مطالعه نمایید ،

سناریو شماره 2 :
در یک پروژه فروشگاه آنلاین کتاب که با ASP.Net 3.5 پیاده سازی میگردد نیاز به نگهداری سبد خرید(Shopping Cart) میباشد ، توجه داشته باشید که کاربران بی نام(Anonymous Users) نیز باید همانند کاربران تایید هویت شده(Authenticated Users) توانایی ایجاد سبد خرید را داشته باشند. سبد خرید هر کاربر باید برای مراجعات بعدی وی نگهداری شود ، اما شیوه ، مدت زمان و مکان نگهداری سبد خرید 2 گروه کاربران ذکر شده لزوما" نباید یکسان باشد . برای مدیریت کاربران نیز از امکانات Membership Management که در ASP.Net 2.0 معرفی شد ، بهره گیری میشود . در روشهای پیشنهادی خود 2 فاکتور مهم امنیت(Security) و کارایی(Performance) را نیز مد نظر قرار دهید .
لطفا" راهکارهای خود را با ذکر جزئیات و به طور دقیق ذکر نمایید ،

"سناریو تکمیل شد"

پیشاپیش از شرکت شما در این بحث ، سپاسگزارم ،/

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

m.hamidreza
پنج شنبه 16 آبان 1387, 22:58 عصر
چیزی شبیه به این سناریو قبلا در تالار ASP.NET مطرح شده.
بهتره این سناریو به دوتا ساب سناریو تقسیم بشه. ساب سناریو 1 برای کاربران مهمان و ساب سناریو 2 برای اعضاء که مدیریت سناریوی اعضاء به مراتب راحت تر از کاربران مهمان هست.
در سناریوی کاربران مهمان از کوکی میتونیم استفاده کنیم.
در سناریوی کاربران عضو هم از Cache یا دیتابیس.
Apress کتابی در این مورد داره که در اون به خوبی شرح ما وقع رو توضیح داده در اونجا از دیتابیس استفاده شده . در تاپیک هایی که در تالار ASP.NET قبلا مطرح شده بود جناب استاد بهروز خان راد Cache رو پیشنهاد کرده بودن و دلایل و روشون رو هم تقریبا کامل توضیح دادن...
ولی خوب مسلما شرایط پروژه رو انتخاب روش انجام پروژه تاثیر میذاره.

علیرضا مداح
جمعه 17 آبان 1387, 19:16 عصر
@m.hamidreza
از شرکت شما در بحث سپاسگزارم ،

در این تاپیک قصد داریم که به طور موشکافانه این مبحث را مورد بررسی قرار دهیم ،



در سناریوی کاربران مهمان از کوکی میتونیم استفاده کنیم.

1)به نظر شما اگر تعداد آیتم های سبد خرید کاربر بالا رود ، تاثیر منفی بر روی Performance نمیگذارد؟چون هر کوکی در هر درخواست ، بین سرور و کلاینت رد و بدل میشود و در صورتیکه حجم بالایی داشته باشد تاثیر منفی بر روی Performance خواهد گذاشت ،
2)در صورت بهره گیری از کوکی ، چه راهکاری را جهت دستیابی به حداکثر کارایی پیشنهاد میکنید؟
2)اگر کوکی ها در مرورگر کاربر غیرفعال شده باشد ، درآنصورت چه راهکاری را پیشنهاد میکنید؟
4)به نظر شما کوکی محلی ایمن برای ذخیره سازی سبد خرید است؟ یا به عبارتی دیگر با لو رفتن اطلاعات سبد خرید آیا خطری سایت را تهدید میکند؟در اینصورت آیا رمزگذاری کوکی را پیشنهاد میکنید؟و یا اینکه چه روش دیگری را برای ایمن سازی کوکی پیشنهاد میدهید؟

vb_bmw
دوشنبه 20 آبان 1387, 01:13 صبح
1)به نظر شما اگر تعداد آیتم های سبد خرید کاربر بالا رود ، تاثیر منفی بر روی Performance نمیگذارد؟چون هر کوکی در هر درخواست ، بین سرور و کلاینت رد و بدل میشود و در صورتیکه حجم بالایی داشته باشد تاثیر منفی بر روی Performance خواهد گذاشت ،


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



2)در صورت بهره گیری از کوکی ، چه راهکاری را جهت دستیابی به حداکثر کارایی پیشنهاد میکنید؟


به نظر من اگه از کوکی یا هر روش دیگه ای بخواهیم استفاده کنیم ، بهترین راهکار ذخیره اطلاعات لازم به فرمت XML و یا Json در محل ذخیر سازیمون هستش(مثلا کش)



3)اگر کوکی ها در مرورگر کاربر غیرفعال شده باشد ، درآنصورت چه راهکاری را پیشنهاد میکنید؟
؟

روشی که به نظر من اینجا جواب گو باشه استفاده از Session هست!البته این کار هم ممکنه هم از نظر امنیتی و هم از نظر کارایی به سیستم فشار بیاره ولی بازم راه حل استفاده از یک قالب بندی مشخص برای اطلاعات هست ، مثل Json که هم حجم کمی داره ، هم کارایی بالایی داره ، هم کلاس هایی برای ارتباط با اون وجود داره ، به راحتی با تکنلوژی های جدید ارتباط برقرار می کنه ( AJAX) و از همه مهم تر به پلتفرم خاصی وابسته نیست!

پ.ن : امید وارم این یکی پاک نشه!!!

m.hamidreza
دوشنبه 20 آبان 1387, 10:47 صبح
@m.hamidreza
از شرکت شما در بحث سپاسگزارم ،

خواهش میکنم.


1)به نظر شما اگر تعداد آیتم های سبد خرید کاربر بالا رود ، تاثیر منفی بر روی Performance نمیگذارد؟چون هر کوکی در هر درخواست ، بین سرور و کلاینت رد و بدل میشود و در صورتیکه حجم بالایی داشته باشد تاثیر منفی بر روی Performance خواهد گذاشت ،

شما حجم بالای کوکی رو چقدر در نظر میگیرین؟


2)در صورت بهره گیری از کوکی ، چه راهکاری را جهت دستیابی به حداکثر کارایی پیشنهاد میکنید؟

ببینید توی یه همچین سایتی دو حالت بیشتر وجود نداره یا پروسه ی خرید کامل میشه یا نمیشه! در حالت اول برای ورود به پروسه ی پرداخت پول کاربر باید لاگین کنه و اگه پروسه ی پرداخت انجام نشه اصطلاحا کاربر مهمان یا داره تو سایت بازی میکنه یا یه مشکلی براش پیش میاد که وارد مرحله پرداخت نمیشه. حالا این دسته از کاربران چند درصد عموم کاربران اون سایت رو تشکیل میدن؟ با توجه به این شرایط من غیر کوکی چیزی به ذهنم نمیرسه.



2)اگر کوکی ها در مرورگر کاربر غیرفعال شده باشد ، درآنصورت چه راهکاری را پیشنهاد میکنید؟

به کاربر پیغام بده کوکی مرورگر رو فعال کنه. چون این دسته از کاربران جزء حداقل کاربران سایت هستند به نظر من نباید زیاد به فکر آلترنتیوهای پروژشون بود.


4)به نظر شما کوکی محلی ایمن برای ذخیره سازی سبد خرید است؟ یا به عبارتی دیگر با لو رفتن اطلاعات سبد خرید آیا خطری سایت را تهدید میکند؟در اینصورت آیا رمزگذاری کوکی را پیشنهاد میکنید؟و یا اینکه چه روش دیگری را برای ایمن سازی کوکی پیشنهاد میدهید؟

اگه این کوکی دزدیده شه چه استفاده ای میشه ازش کرد؟ دارنده ی اون کوکی باید پول کتاب هارو در مرحله ی بعدی بده. به نظر من اونقدر نباید نگران امنیت این کوکی بود.


روشی که به نظر من اینجا جواب گو باشه استفاده از Session هست!!
در حالتی که کوکی غیر فعال باشه عملا از Session هم نمیتونین استفاده کنین.

علیرضا مداح
دوشنبه 20 آبان 1387, 11:13 صبح
اگه این کوکی دزدیده شه چه استفاده ای میشه ازش کرد؟ دارنده ی اون کوکی باید پول کتاب هارو در مرحله ی بعدی بده. به نظر من اونقدر نباید نگران امنیت این کوکی بود.

پس نظر شما بر این است که دزدیده شدن کوکی ، خطری بر روی امنیت نخواهد داشت ، این مورد صحیح است ، البته باید توجه کنید که همراه با Cookie ، نباید اطلاعات مهم(Sensitive) دیگری ذخیره گردد ،


در حالتی که کوکی غیر فعال بوده عملا از Session هم نمیتونین استفاده کنین.
خیر.در این صورت میتوانید از Seesion های Cookieless بهره گیری نمایید که البته در این مورد هم قرار دادن SessionID در URL به دلیل تحمیل نمودن ریسک امنیتی بر روی سایت ، پیشنهاد نمیگردد و در صورت استفاده هم باید SessionID را با یک مقدار رندوم دیگر ترکیب نمود و همچنین مقدار regenerateExpiredSessionId در web.config بر روی true قرار گیرد .

amir-yazdel
دوشنبه 20 آبان 1387, 20:56 عصر
سلام
من آماتورم، اما چیزی که به نظرم می آد اینه که یک فایل یا دیتابیس توی سرور سایت ایجاد کرده و برای هر سفارش دهنده یک آی دی و مشخصات منحصر به فرد قرار بدیم و فقط اون اطلاعات از طرف کوکی ها ردو بدل بشه.
اگه اشتباه می گم حتماً درباره فایل ها و دیتابیس ها و همچنین در مورد کوکی ها بیشتر منو روشن کنید.
ممنون
یاعلی

Behrouz_Rad
سه شنبه 21 آبان 1387, 16:35 عصر
عنصر اصلی در طراحی سبد خرید در ASP.NET، شی Cache هست.
اطلاعات خرید در یک لیست Generic، و لیست Generic نیز در Cache نگهداری میشه.
حداقل اطلاعاتی که برای هر مشتری نیاز هست شامل: مشخصه ی مشتری، IP مشتری، یک عبارت راندوم و زمان انتخاب آخرین محصول.

نکته ی مهمی که باید به اون دقت داشته باشید، احتمال یکسان بودن IP های کاربران است. به عنوان مثال، کاربرانی که از یک شبکه ی LAN استفاده می کنند و IP تمامی اونها یکسان هست.
چون نیاز به یک مشخصه برای تمیز دادن افراد در هنگام خرید هست و به دلیل گفته شده نمیشه به IP کاربران "مهمان" اعتماد کرد، لذا یک عبارت راندوم رو - مثلاً با استفاده از متد NewGuid کلاس GUID - ایجاد، در کوکی ذخیره، و در هنگام ورود کاربر به سایت بر روی سیستم اون ذخیره می کنیم. کاربران عضو چون از نام کاربری استفاده می کنند نیاز به کوکی ندارند.
نکته ی مهم اینکه ابتدا باید فعال بودن کوکی ها بر روی سیستم کاربر مهمان - مثلاً با استفاده از متد Cookies کلاس HttpBrowserCapabilities - رو بررسی کنید. هر چند که در اکثریت قریب به اتفاق مواقع کوکی ها بر روی سیستم فعال هستند اما پیش بینی وجود رخدادی حتی در حد 1 درصد، می تونه از وقوع مشکل در هنگام تعامل کاربر با صفحه جلوگیری کنه. در صورت غیر فعال بودن کوکی ها، از خرید کاربر جلوگیری و پیغام مناسبی رو نمایش بدید.

در هنگام ارسال درخواست خرید، لیست Generic از Cache بازیابی شده و با حرکت بین آیتم های اون - پیشنهاد من استفاده از LINQ هست - افرادی که زمان آخرین انتخاب کالای اونها از مقدار مشخصی گذشته و درخواست رو نهایی نکردن، از لیست حذف میشن.
نکته ی مهمتر اینکه، برای Cache باید زمان Sliding به منظور Expire تعیین کنید و نه زمان Absolute!

بقیه ی موارد واضح هست. به هر حال اگر ابهامی بود، در جهت رفع اون حاضرم.

موفق باشید.

vb_bmw
جمعه 01 آذر 1387, 10:28 صبح
سلام!

من یه نمونه دیدم برای این ماجرا گفتم لینکشو اینجا بزارم

این جا (http://nettuts.com/tutorials/other/build-a-shopping-cart-in-aspnet/)

این دقیقا همون کاری رو که جناب بهروز خان فرمودن رو پیاده سازی کرده!

علیرضا مداح
جمعه 01 آذر 1387, 11:02 صبح
این دقیقا همون کاری رو که جناب بهروز خان فرمودن رو پیاده سازی کرده!
خیر ، در این مقاله از Session State استفاده شده است ،/

vb_bmw
جمعه 01 آذر 1387, 23:04 عصر
خیر ، در این مقاله از Session State استفاده شده است ،/


در هنگام ارسال درخواست خرید، لیست Generic از Cache بازیابی شده و با حرکت بین آیتم های اون - پیشنهاد من استفاده از LINQ هست - افرادی که زمان آخرین انتخاب کالای اونها از مقدار مشخصی گذشته و درخواست رو نهایی نکردن، از لیست حذف میشن.
نکته ی مهمتر اینکه، برای Cache باید زمان Sliding به منظور Expire تعیین کنید و نه زمان Absolute!

منظورم این بود!