PDA

View Full Version : سیستم خرید و صدور فاکتور



iekrang
دوشنبه 11 مهر 1384, 09:54 صبح
سایت من قسمتی داره برای نمایندگان فروش اون شرکت, که توی این قسمت سفارش خرید یه سری محصول رو بدن و در نهایت یه فاکتور بگیرن.(بعد از انتخاب هر محصول تعداد اون رو اضافه میکنند)
من شماره اون فاکتور رو توی Session قرار میدم و از اون توی کل مرحله خرید استفاده میکنم.
آیا استفاده از Session کار درستیه؟
کسی پیشنهادی برای این سیستم فروش و صدور فاکتور نداره؟

Behrouz_Rad
دوشنبه 11 مهر 1384, 11:47 صبح
به هیچ وجه از Session استفاده نکنید.
در صورتی که کوکی ها در مرورگر کاربر غیر فعال باشند، نمی توانید از Session ها استفاده کنید.(This is a RISK)
بهترین راه استفاده از دیتابیس است.
به شکل زیر عمل کنید:
یک Table ایجاد کنید با چهار فیلد: 1) نگهداری IP کاربر 2) ساعت شروع به خرید 3) شماره فاکتور 4) یک فیلد شناسایی
در هنگام انتخاب محصول توسط کاربر، IP و ساعت شروع خرید وی را در دیتابیس ذخیره کنید.
مقدار فیلد شناسایی را (در ابتدا) به صفر تنظیم کنید.
این فیلد به منظور مشخص ساختن وضعیت خرید کاربر استفاده می شود. (کار خرید به پایان رسیده یا خیر)
در هنگام صدور فاکتور، Table را بر اساس آدرس IP کاربر جستجو کنید و در فیلد "شماره فاکتور" رکورد یافت شده، شماره فاکتور صادر شده را قرار دهید.
هر زمان که به "شماره فاکتور" نیاز داشتید، جستجو را بر اساس آدرس IP کاربر انجام دهید و شماره فاکتور را استخراج کنید.
پس از اتمام کار، مقدار فیلد فلگ را 1 تغییر دهید.
سوال: پس از اتمام عملیات خرید، به اطلاعات ذخیره شده در دیتابیس نیازی نیست! با آنها چه کنیم؟
جواب: از فیلد "ساعت شروع به خرید" به همین منظور استفاده می کنیم.
در روال BeginRequest فایل Global.asax، رکورهای موجود در جدول را چک کنید و اگر فیلد فلگ آنها برابر با "1" بود یا ساعت شروع به خرید آنها مثلا مربوط به 1 ساعت پیش بود، آنها را حذف کنید.
سوال: دلیل ذخیره ی "ساعت شروع به خرید" چیست؟
جواب: اگر کاربر در هنگام خرید DC شود، آنگاه مقدار فیلد شناسایی (فلگ) برابر با صفر خواهد ماند و هیچگاه از دیتابیس حذف نخواهد شد!
اما با ذخیره ساعت شروع به خرید کاربر، در صورتی که کاربر DC هم شود باز هم رکورد حذف خواهد شد!
موفق باشید.

iekrang
دوشنبه 11 مهر 1384, 12:21 عصر
مرسی آقای راد

Mahdavi
دوشنبه 11 مهر 1384, 13:13 عصر
البته استفاده از جدول و دیتابیس هم با توجه به وضعیت خطوط ایران یعنی شما برای انتخاب هر کالا زمان بسیاری رو هدر دادن و مشتری شما بعد از مدتی اعصابش خورد میشه و بیخال خرید.
ترکیبی از session و ViewState راه حل خوبیه.
بحث غیر فعال بودن کوکی ها هم میشه به کاربر گوشزد کرد

Behrouz_Rad
دوشنبه 11 مهر 1384, 13:23 عصر
تفاوت محسوسی در سرعت احساس نمیشه.
مثال: کار اصلی به دست آوردن آمار افراد آنلاین سایت، در روال BeginRequest فایل Global.asax انجام می پذیره (که در طی مقاله ای کاملا به توضیح اون اقدام می کنم).
به عبارت دیگه: هر Request برابر است با Data Manipulating
با ذکر مثال فوق، آیا به نظر شما، سرعت سایت asp.net پایینه؟
در مورد ViewState:
ViewState تنها در همان صفحه قابل دسترسی است.
در صورتی که محصولات در صفحات مختلفی جهت انتخاب وجود داشته باشند، ViewState پاسخگوی نیاز ما نیست!
موفق باشید.

Mahdavi
دوشنبه 11 مهر 1384, 16:20 عصر
تفاوت محسوسی در سرعت احساس نمیشه.
مثال: کار اصلی به دست آوردن آمار تعداد افراد آنلاین سایت، در روال BeginRequest فایل Global.asax انجام می پذیره.
که در طی مقاله ای کاملا به توضیح اون اقدام می کنم.
با ذکر مثال فوق، آیا به نظر شما، سرعت سایت asp.net پایینه؟
در مورد ViewState:
ViewState تنها در همان صفحه قابل دسترسی است.
در صورتی که محصولات در صفحات مختلفی جهت انتخاب وجود داشته باشند، ViewState پاسخگوی نیاز ما نیست!
موفق باشید.

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

Behrouz_Rad
دوشنبه 11 مهر 1384, 19:27 عصر
مهدوی عزیز!
مسلمه که فرق می کنه!
به عبارت دیگه، کاری که برای بررسی افراد آنلاین انجام میشه، بیشتر و سنگین تر از خرید اینترنتی هست.
در خرید اینترنتی، لزوما نیاز نیست که با هر بار ارسال درخواستی از کاربر به سمت سرور، دیتابیس مورد استفاده قرار بگیره!
اما در بررسی وضعیت کاربران آنلاین، هر ارسال درخواستی به سمت سرور، موجب دسترسی به داده های موجود در دیتابیس خواهد شد!
در مورد View State باز هم میگم.
در مورد محصولاتی که نیازمند گردش در سایت جهت اضافه کردن به سبد خرید هستند، به هیچ وجه قادر به استفاده از View State نیستید.
موفق باشید.

Identifier
شنبه 23 مهر 1384, 15:31 عصر
خوب اگر 2 کاربر از یک ISP همزمان خرید رو شروع کنن اون موقع چی ؟

Behrouz_Rad
شنبه 23 مهر 1384, 16:55 عصر
خوب بکنن! چه مشکلی پیش میاد؟

mahmood_comp
جمعه 16 دی 1384, 13:02 عصر
با سلام
در طراحی یک سبد خرید برای یک خریدار که در سایت عضو نمی باشد باید یک ip تخصیص بدهیم حال چگونه این ip را ایجاد می کنیم ؟البته اینو میدونم که با استفاده از guid میتوانیم ip هایی منحصر به فرد بسازیم اما نمی دونم که این کار که احتمالا باید از cookie استفاده کنیم به چه شکل انجام می شود؟

mahmood_comp
شنبه 17 دی 1384, 16:15 عصر
با سلام
هیچکس پاسخی ندارد؟

nazaninam
یک شنبه 18 دی 1384, 22:36 عصر
دوست عزیز از همون guid استفاده کن یعنی یه guid تولید کن و یک کوکی با مقدار این guid بساز دفعه بعد که کاربر اومد اگه این کوکی باشه میشناسش ....

mahmood_comp
جمعه 07 بهمن 1384, 17:36 عصر
برای تهیه یک سبد خرید باید به هر کاربر بوسیله system.guid یک شماره منحصر به فرد داده شود اما شماره ایی که تولید می شود شامل کارکتر و عدد می باشد برای ذخیره این id چه کنم؟

2- این شماره بوسیله کوکی ذخیره می شود ایا این کوکی را باید در قسمت هایی از فایل global.asax (مثلا در قسمت applocation.begin request یا application.startس) باید نوشت یا در pageload صفحه ایی که کاربر در ابتدا آنرا مشاهده میکند؟

3- به طور معمول چه خصوصیاتی را از کوکی مورد نظر باید تنظیم کرد که بتوانیم از اطلاعات ان در سبد خرید آن مشتری استفاده کنیم؟

4- ایا در فایل های ,global.asax,webconfig کد خاصی را باید بنوسیم ؟
بقیه سوال هایم را در رابطه با ساعت شروع به خرید و... بعد از پاسخ شما مطرح می کنم.
موفق باشید

Behrouz_Rad
شنبه 08 بهمن 1384, 21:58 عصر
1) کلمه ی IP، مخفف عبارت Internet Protocol است!!!
تمامی رایانه های متصل به اینترنت، یک شماره ی IP دارند که به منظور شناسایی آنها در شبکه مورد استفاده قرار می گیرد.
این شماره ی IP با استفاده از خاصیت UserHostAddress کلاس Request، قابل بازیابی است.


Response.Write(HttpContext.Current.Request.UserHos tAddress.ToString())

2 و 3) خیر! این IP در دیتابیس ذخیره خواهد شد!
4) در فایل Web.Config خیر اما روال BeginRequest، متعلق به فایل Global.asax است.

موفق باشید.

mahmood_comp
یک شنبه 09 بهمن 1384, 18:42 عصر
اقای راد با سلام
صمیمانه متشکرم.

mahmood_comp
شنبه 15 بهمن 1384, 17:16 عصر
با سلام به همه دوستان
در تهیه سبد خرید آقای راد فرمودند که تمامی رایانه های متصل به اینترنت، یک شماره ی IP دارند که به منظور شناسایی آنها در شبکه مورد استفاده قرار می گیرد.
این شماره ی IP با استفاده از خاصیت UserHostAddress کلاس Request، قابل بازیابی است
حال طبق سوالی که آقای ذوالقدر هم پرسیده بود این مشکل برایم بوجود آمده است که هنگامی که از روی یک رایانه چندین نفر قصد خرید دارند دچار مشکل می شوم؟
زیرا که دیگر هر خریدار شماره منحصر بفرد ندارد.
باید چه کار کنم؟
موفق باشید..

Identifier
شنبه 15 بهمن 1384, 17:24 عصر
یک Table ایجاد کنید با چهار فیلد: 1) نگهداری IP کاربر 2) ساعت شروع به خرید 3) شماره فاکتور 4) یک فیلد شناسایی

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

با تشکر از آقای مهدوی و آقای راد

mahmood_comp
شنبه 15 بهمن 1384, 18:25 عصر
در مورد مطلبی که اقای ذوالقدر فرمودند اگر مثلا چند نفر در کافی نت بخواهند از یک سیستم، عملیات خرید رو انجام بدهند
و احیانا یک نفر دکمه ثبت فاکتور را نزده باشد با ورود دوباره به سایت دیگر سبد خریدقبلی اش را نخواهد داشت
آیا این یک اشکال نیست؟
دوم اینکه:
من در table مربوطه دو فیلد تعریف کردم یکی برای نگه داری تاریخ و دیگری برای نگه داری ساعت
اما هنگامی که می خواهم توسط دستور
Com.Parameters.Add(New SqlParameter("@saatsho", SqlDbType.DateTime)).Value = DateTime.Now.ToShortTimeString()
ساعت را ذخیره کنم در فیلد مربوط به زمان تاریخ هم insert می شود .
در حالی که در مورد تاریخ با استفاده از دستور DateTime.Now.ToShortDateString()
به خوبی تنها تاریخ insert می شود .
راهنمایی می کنید؟

Behrouz_Rad
شنبه 15 بهمن 1384, 21:38 عصر
IP ممکنه یکسان باشه اما نام کاربری که یکسان نیست!

Identifier
شنبه 15 بهمن 1384, 21:55 عصر
IP ممکنه یکسان باشه اما نام کاربری که یکسان نیست!
حرف شما بجا و صحیح اما در صورتی که کاربر قدیمی باشد اگر روش خرید ما طوری باشد که در آخرین مرحله در صورتی که کاربر رمز عبور داشته باشد وارد کند و اگر نه ثبت نام کند معمولا برای اینکه کاربر راحت باشه روش های اینچنینی انتخاب میکنند میدونم که میشه با استفاده از کوکی و سشن این مساله رو حل کرد وشاید اصلا این اتفاق نیفتد اما خودش شاید یک ریسک باشه.
و جای داره از تمامی مدیران و دوستانی که وقت صرف میکنن و جواب یکی مثل من و میدند کمال تشکر و قدر دانی رو بجا بیارم

با تشکر

Behrouz_Rad
شنبه 15 بهمن 1384, 22:29 عصر
اگر روش خرید ما طوری باشد که در آخرین مرحله در صورتی که کاربر رمز عبور داشته باشد وارد کند و اگر نه ثبت نام کند معمولا برای اینکه کاربر راحت باشه روش های اینچنینی انتخاب میکنند

درسته. دقیقا همون کاری که سایت www.amazon.com انجام میده!
در صورتی که کاربر برای سیستم ناشناخته باشه و اقدام به خرید کنه، تمامی توضیحاتی که قبلا ذکر کردم در اینجا هم صدق می کنه با این تفاوت که در این حالت مسلما به یک کوکی نیاز خواهید داشت!
در این کوکی باید شماره ی منحصر به فردی (همراه با اطلاعات دیگر وی) برای کاربر ذخیره بشه.
محصولاتی که کاربر در حین خرید انتخاب می کنه، دارای این شماره ی منحصر به فرد خواهند بود تا بدین طریق قادر باشید محصولات انتخاب شده توسط کاربر ناشناخته رو تشخیص بدید.

موفق باشید.

mahmood_comp
یک شنبه 16 بهمن 1384, 08:30 صبح
اقای راد هنگامی که کاربر نا شناخته است دیکر نام کاربری ندارد.
ضمنا اون تیکه دوم سوال منو درباره ذخیره ساعت رو میشه جواب بدین یا اینکه باید در قسمت sql بپرسم؟
موفق باشید.

Identifier
یک شنبه 16 بهمن 1384, 08:53 صبح
درسته. دقیقا همون کاری که سایت www.amazon.com (http://www.amazon.com) انجام میده!
در صورتی که کاربر برای سیستم ناشناخته باشه و اقدام به خرید کنه، تمامی توضیحاتی که قبلا ذکر کردم در اینجا هم صدق می کنه با این تفاوت که در این حالت مسلما به یک کوکی نیاز خواهید داشت!
در این کوکی باید شماره ی منحصر به فردی (همراه با اطلاعات دیگر وی) برای کاربر ذخیره بشه.
محصولاتی که کاربر در حین خرید انتخاب می کنه، دارای این شماره ی منحصر به فرد خواهند بود تا بدین طریق قادر باشید محصولات انتخاب شده توسط کاربر ناشناخته رو تشخیص بدید.

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

Behrouz_Rad
یک شنبه 16 بهمن 1384, 09:01 صبح
اقای راد هنگامی که کاربر نا شناخته است دیکر نام کاربری ندارد.

دوست عزیزم!
موارد به این واضحی رو معمولا توضیح نمیدن.
مسلم هست که نام کاربری وجود نداره، بقیه اطلاعات همانند IP و ساعت خرید رو ذخیره بفرمایید.


اون تیکه دوم سوال منو درباره ذخیره ساعت رو میشه جواب بدین یا اینکه باید در قسمت sql بپرسم؟

هم در این بخش به عنوان یک تاپیک جدا و یا در بخش VB.NET بپرسید.

موفق باشید.

mahmood_comp
یک شنبه 16 بهمن 1384, 17:51 عصر
آقای راد با سلام
از راهنمایی های جنابعالی متشکرم.

ealireza
یک شنبه 16 بهمن 1384, 19:20 عصر
روشه خوبیه ولی فشار سنگینی رو DB میندازه
اگه با سشن کار میشد فکر کنم بهتر بود ..

اگه این روش رو Amazon پیاده میشد فکر کنم غیر عملی بود ..

در هر صورت موفق باشید

Behrouz_Rad
یک شنبه 16 بهمن 1384, 22:23 عصر
روشه خوبیه ولی فشار سنگینی رو DB میندازه
اگه با سشن کار میشد فکر کنم بهتر بود ..
تلفیقی از DB , Cache استفاده میشه.

ealireza
دوشنبه 17 بهمن 1384, 12:50 عصر
تلفیقی از DB , Cache استفاده میشه.
خوبه
موفق باشید

azam2005
چهارشنبه 17 خرداد 1385, 09:18 صبح
سلا نظرتون راجع به لینک زیر چیه
http://www.codeproject.com/aspnet/DGenericBasket.asp

golnaz99
شنبه 25 فروردین 1386, 14:21 عصر
سلام دوستان من در حال طراحیه یک فروشگاه اینترنتی هستم و الان در قسمت سبد خرید هستم چند سوال دارم که ترجیح دادم در همین تاپیک مزاحم دوستان شوم
اول در مورد ip در این تاپیک گفته شد که از guid برای ایجاد ip های منحصر به فرد استفاده شود.دوستا ن در همین تالار این جوری من را راهنمایی کردند که نوع ستون را uniqueidentifier تعریف کنم , rowguid انرا yes کنم .ولی با این روش که هر دفعه ip تغییر میکند؟پس چه طوری وقتی کاربر disconnect میشود راشناسایی کنیم؟
در ضمن این روش استفاده از جدول با فیلدهای گفته شده در تاپیک فقط برای همین صدور فاکتور است و یا برای بقیه فروشگاهای اینترنتی هم استفاده میشود؟
در انتها هم گفته شد که تلفیقی از DB , Cache استفاده شود .میشه در این مورد بیشتر توضیح دهید.
در مورد کوکی هم میشه توضیح بدید این کوکی را چه طوری باید بفرستیم؟
در ضمن یکی از دوستان یک نکته را یاداوری کردند که اگر یه کاربر در حین انجام کار مجبور شود بقیه کار را از روی سیستم دیگری انجام دهد تکلیف سبد خریدش چی میشه و چند سوال دیگه که در ادامه مطرح میکنم
اگه دوستان راهنمایی کنند خیلی ممنون میشوم

fereshte22
یک شنبه 26 فروردین 1386, 14:35 عصر
سلام
من هم در سبد خرید مشکل داریم اگه دوستان و همچنین اقای مدیر راهنمایی کنند ممنون میشم

hesam_a110
پنج شنبه 19 مهر 1386, 11:24 صبح
اگر از .NET2 استفاده می کنید می توانید از profile ها استفاده کنید که خودش همه کارها را به راحتی براتون انجام میدهد

shocraneh
دوشنبه 24 اسفند 1388, 10:49 صبح
سوال: پس از اتمام عملیات خرید، به اطلاعات ذخیره شده در دیتابیس نیازی نیست! با آنها چه کنیم؟
.
چرا اصرار دارید لیست خرید از پایگاه حذف شود . بهتر نیست لیستی از آخرین خرید های مشتری موجود باشد . میشه کاربر با مراجعه به این لیست خریدشو تکرار کنه و برای اینکه حجم دیتابیس بالا نره مثلا 10 رکورد آخر نگهداری شود . این جوری اصلا ip هم نمی خاهیم و اگه کاربر dc هم شد لیست موجود است البته یه فیلد وضعیت هم مورد نیازه . به نظر من حذف سبد خرید کار درستی نیست چون اگه مشتری اجناس خودشو دریافت نکنه و اعتراضی نسبت به قضیه داشته باشه ، دیگه قابل پیگیری نیست
لطفا نظر بدید. من الان دارم روش کار می کنم