PDA

View Full Version : چند سوال در مورد سبد خرید



golnaz99
سه شنبه 28 فروردین 1386, 09:21 صبح
سلام
من چند تا سوال در مورد فروشگاه اینترنتی و قسمت سبد خرید اون داشتم. در انجمن هم جستجو کردم و تصمیم گرفتم از روشی که اقای راد در یکی از تاپیک ها با عنوان سیستم خرید و صدور فاکتور داده بودند استفاده کنم .چند سوال داشتم که در همون تاپیک مطرح کردم ولی متاسفانه جوابی نگرفتم به همین دلیل تصمیم گرفتم سوالاتم را در اینجا تکرار کنم اگه دوستان راهنمایی کنند ممنون میشوم.

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

golnaz99
سه شنبه 28 فروردین 1386, 18:17 عصر
اخه چرا کسی کمک نمیکنه؟

Alireza_Salehi
سه شنبه 28 فروردین 1386, 21:05 عصر
اول در مورد ip در این تاپیک گفته شد که از guid برای ایجاد ip های منحصر به فرد استفاده شود.
IP در هیچ شرایطی و به هیچ عنوان هیچ ربطی به GUID نداره!
منظور اون مقاله از این جمله:

با سلام
در طراحی یک سبد خرید برای یک خریدار که در سایت عضو نمی باشد باید یک ip تخصیص بدهیم حال چگونه این ip را ایجاد می کنیم ؟البته اینو میدونم که با استفاده از guid میتوانیم ip هایی منحصر به فرد بسازیم اما نمی دونم که این کار که احتمالا باید از cookie استفاده کنیم به چه شکل انجام می شود؟
این بوده که چطور به هر نفر یک عدد منحصربفرد (یا شماره شناسایی ، یا اسم، یا هر چیزی که اونو از بقیه متمایز کنه) اختصاص بدیم نه این که IP کاربر رو با GUID بسازیم.آقای راد هم دقیقا این اشتباه رو توضیح داده بودن:

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


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



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

اما اگر IP کاربر ثابت نباشه به طریقی باید شما متوجه بشید که این کاربر همون کاربر قبلیه ، یک راهش عضویت در سایته (که برای کاربران ناشناس کاربرد نداره) و راه دومش استفاده از کوکی!
در صورتی که فرد ناشناسی وارد سایت بشه یک GUID جدید میسازید و در کوکی ذخیره میکنید (این بار به جای این که کلید جدول ما IP فرد باشه از GUID استفاده می کنیم) حالا به هر دلیلی که کاربر خریدش رو متوقف کنه اگر دوباره وارد سایت بشه (دیگه مهم نیست IP یش چی باشه) کوکی رو میخونیم و با GUID که در کوکی هست تشخیص میدیم کدوم شبد مال این کاربره!


در ضمن این روش استفاده از جدول با فیلدهای گفته شده در تاپیک فقط برای همین صدور فاکتور است و یا برای بقیه فروشگاهای اینترنتی هم استفاده میشود؟
این یک روش کلیه و در هر کاربردی میتونه استفاده بشه ، البته از لحاظ منطقی داده های هر کاربردی با بقیه فرق میکنه پس جدول هم تغییر میکنه.


در انتها هم گفته شد که تلفیقی از DB , Cache استفاده شود .
این کار برای بالا بردن سرعت کار با دیتابیس هست و ربطی به روش کار نداره، برای اطلاعات بیشتر ویدئو های www.asp.net (http://www.asp.net) رو در مورد Caching ببینید.


در مورد کوکی هم میشه توضیح بدید این کوکی را چه طوری باید بفرستیم؟
نوشتن:

Dim c as new HttpCookie("ShoppingCart")
c.Value="125.458.215.58"
Response.Cookies.Add(c)

خواندن:

Dim c as HttpCookie= Request.Cookies("ShoppingCart")
Dim s As String=c.Value

اون مقاله رو یکبار دیگه با دقت تر بخونید!

موفق باشید.

golnaz99
سه شنبه 28 فروردین 1386, 21:55 عصر
دوست عزیز از اینکه ابهامات من را برطرف کردید خیلی ممنون هستم.
اگه بازم در طراحیه سبد خریدم مشکل داشتم در همین تاپیک مطرح میکنم
بازم ممنون:تشویق:

golnaz99
چهارشنبه 29 فروردین 1386, 11:17 صبح
سلام
چند تا سوال داشتم اول اینکه قرار شد مقدار guid در کوکی ذخیره شود حالا این guid را باید به چه صورت در کوکی ذخیره کنیم؟
من فکر کردم به صورت زیر ولی خوب این طوری مشکل دارد


Dim g1 As New Guid
Dim c As New HttpCookie("ShoppingCart")
c.Value = g1
Response.Cookies.Add(c)

در ضمن میشه بگید این کدهای ذخیره و بازیابی کوکی را در چه روالها و صفحاتی باید بنویسم؟(pageload وgloabal و...)
ایا باید این کوکی را در دیتابیس ذخیره کنیم؟
البته میدونم که بعضی از این سوالات در اون تاپیک هم پرسیده شده بود و چون من تا حالابا کوکی کار نکردم برام یه کم مبهمه

Alireza_Salehi
چهارشنبه 29 فروردین 1386, 12:08 عصر
کجا باید نوشت:
هر جا که دلتون میخواد ، دیگه بستگی به منطق برنامه شما داره! مثلا در Global میشه یا موقعی که کاربر روی دکمه "افزودن به سبد خرید" کلیک میکنه تا کالای مورد نظر رو بخره یا هر جای دیگه.
چوری به کوکی اضافه کنیم:
کوکی فقط متن(Text) میگیره بنابراین هر چیزی که می خواهید در کوکی قرار بدید باید ToString بشه!

در ضمن یه چیزی هست به نام MSDN ، خیلی چیز خوبیه ، کافیه هر جا مشکل داشتید روی کلمه مورد نظر F1 بزنید ، هم در مورد موضوع توضیح میده و هم یک مثال کوچیک داره و باعث میشه خیلی سریع تر به جواب برسید.

مثلا توی کد روی HttpCookie کلید F1 رو بزنید:
http://msdn2.microsoft.com/en-us/system.web.httpcookie_members(VS.71).aspx
و در اونجا خواهید دید که خاصیت Value از نوع String هستش.

جستجو هم یادتون نره:
http://www.barnamenevis.org/forum/showthread.php?t=60275&highlight=cookie
http://www.barnamenevis.org/forum/showthread.php?t=49980&highlight=cookie
http://www.barnamenevis.org/forum/showthread.php?t=24852&highlight=cookie
http://www.barnamenevis.org/forum/showthread.php?t=41429&highlight=Cookie
http://www.barnamenevis.org/forum/showthread.php?t=19122&highlight=Cookie
http://www.barnamenevis.org/forum/showthread.php?t=1602&highlight=Cookie
http://www.barnamenevis.org/forum/showthread.php?t=3640&highlight=Cookie
موفق باشید.

golnaz99
چهارشنبه 29 فروردین 1386, 15:38 عصر
یه چیزایی در مورد کوکی داره دستم میاید .در ضمن در مورد اینکه گفته بودید باید مقدار tostring باشد یعنی باید به این صورت تعریف کنیم


Dim g As Guid
Dim c As New HttpCookie("ShoppingCart")
c.Value = g.ToString()
Response.Cookies.Add(c)

البته این طوری فقط صفر برمیگرداند

Alireza_Salehi
چهارشنبه 29 فروردین 1386, 15:51 عصر
یه چیزایی در مورد کوکی داره دستم میاید
:تشویق::تشویق::تشویق::تشویق:



Dim mGUID As Guid = Guid.NewGuid()
c.Value = mGUID.ToString()


یا



c.Value = Guid.NewGuid().ToString()

golnaz99
پنج شنبه 30 فروردین 1386, 11:37 صبح
سلام
من چند تا سوال برام پیش اومد.در این لینک :http://www.barnamenevis.org/forum/showthread.php?t=19122&highlight=Cookie
این مسئله عنوان شده بود


یکه نکته مهم: در صورتی که روال کار شما در طراحی یک Web Application به گونه ای است که نیاز به جمع آوری اطلاعات کاربر در مراحل مختلف و در حین پیمایش صفحات است، بهترین راه، استفاده از ViewState است.
Session و Cookie به هیچ وجه توصیه نمی شود.

این جمله من را گیج کرده است چون که من هم طی مراحلی اطلاعات کاربر را میگیرم .در واقع مرا حل کار من مثل لینک زیر است:
http://www.shoppersian.com/index.asp
شاید هم منظور اون جمله یه چیز دیگه بوده .حالا در کل من نمیدونم با این روال کاری از کوکی استفاده کنم و یا نه؟
در ضمن من اینطوری عمل کردم که وقتی کاربر بر روی دکمه خرید کلیک میکند IP و مقدار GUID و IDKALA در جدول سبد خرید ذخیره میشود (من کدهای مربوط به ایجاد کوکی و خواندن انرا pageload صفحه قرار داده ام که در واقع همه کدهایم در همین pageload است.حالا وقتی کاربر برمیگردد و میخواهد یه کالای دیگه را بخردچی کار کنم که مقدار guid قبلی براش ذخیره شود و یه مقدار جدید براش ذخیره نشود.چون هر دفعه یه کوکی جدید ساخته میشود.
در ضمن این روال کاری درست است که هر دفعه که کاربر خرید میکند یه رکورد جدید به جدول سبد خرید اضافه شود که مقدار ip و guid مثل رکورد قبلی باشد و فقط idkala تغییر کند و یا از روال کاری دیگری باید استفاده کرد؟
ممنون میشم که بازم راهنماییم کنید

Alireza_Salehi
پنج شنبه 30 فروردین 1386, 14:45 عصر
مطلب پست شماره 7 اون لینک صحیح است ، ViewState تنها در همان صفحه ای که استفاده شده معتبر هست و اگر به صفحه دیگه ای برید یا مرورگر رو ببندید از بین میره بنابراین به درد سبد خرید نمیخوره!

البته این کلمه "ریسک بزرگ" در تمام تاپیک هایی که لغت کوکی توش وجود داره در پست های یک نفر دیده میشه ، حالا این همه سایت معتبر و بین المللی و صد البته امن و با کارایی بالا و تعداد زیادی کاربر چرا از کوکی استفاده می کنند ، خدا میدونه!

جواب سوال دوم رو هم که داده بودم:

اما اگر IP کاربر ثابت نباشه به طریقی باید شما متوجه بشید که این کاربر همون کاربر قبلیه ، یک راهش عضویت در سایته (که برای کاربران ناشناس کاربرد نداره) و راه دومش استفاده از کوکی!
در صورتی که فرد ناشناسی وارد سایت بشه یک GUID جدید میسازید و در کوکی ذخیره میکنید (این بار به جای این که کلید جدول ما IP فرد باشه از GUID استفاده می کنیم) حالا به هر دلیلی که کاربر خریدش رو متوقف کنه اگر دوباره وارد سایت بشه (دیگه مهم نیست IP یش چی باشه) کوکی رو میخونیم و با GUID که در کوکی هست تشخیص میدیم کدوم سبد مال این کاربره!


حالا وقتی کاربر برمیگردد و میخواهد یه کالای دیگه را بخردچی کار کنم که مقدار guid قبلی براش ذخیره شود خوب از روی IP !

اگر از IP استفاده می کنید دیگه GUID واسه چیه؟

در ضمن واسه چی تو Page_Load قرار دادید؟ این کار (چک کردن IP و ...) فقط وقتی روی دکمه خرید کلیک میشه یا وقتی سبد خرید ویرایش میشه و در موقع پایان خرید لازمه و نه بیشتر!

یه نکته در مورد کوکی بگم و اون این که اگر کوکی غیر فعال باشه کاربر حتی نمیتونه ایمیلش رو چک کنه (حداقل تو yahoo , gmail , hotmail که اینطوریه) ، بنابراین فقط به دلایل خاصی ممکنه کوکی در مرورگر غیر فعال باشه!

و اگر به هر دلیلی بخواهید با بسته شده مرورگر اطلاعات ثبت شده باقی بمونه تنها راه همون کوکی است.

Behrouz_Rad
پنج شنبه 30 فروردین 1386, 17:10 عصر
البته این کلمه "ریسک بزرگ" در تمام تاپیک هایی که لغت کوکی توش وجود داره در پست های یک نفر دیده میشه ، حالا این همه سایت معتبر و بین المللی و صد البته امن و با کارایی بالا و تعداد زیادی کاربر چرا از کوکی استفاده می کنند ، خدا میدونه!

تیکه میندازی برادر؟ خوب بگو در پست های "بهروز راد" دیده میشه خودتو راحت کن!:چشمک:
در مورد کوکی ها، "ریسک بزرگ" تعابیر مختلفی داره.
این تنها جنبه ی هشداریه قضیه است وگرنه پیاده سازی اکثر برنامه های مبتنی بر وب بدون وجود کوکی شاید بتونیم بگیم غیر ممکن هست!
سایت eBay برای خرید شما رو ملزم به فعال کردن قابلیت پشتیبانی از کوکی ها می کنه، سایت هایی که مثال زدی نیز همین طور هستند...
"ریسک بزرگ" رو به این شکل تعبیر کن که همیشه ممکنه احتمال وجود یک رویداد غیر قابل پیش بینی در روال انجام کار به وجود بیاد.
همیشه با این دید برنامه بنویسید.

موفق باشید.:لبخندساده:

Alireza_Salehi
پنج شنبه 30 فروردین 1386, 21:22 عصر
به دل نگیر بهروز جان ، قصد خیر داشتم نه شر! :چشمک:

این رو هم از این بابت گفتم که چون خیلی از پستها رو دیدم که همه سردرگم بودن چرا نباید از کوکی استفاده کنند ، گفتم شاید یه کم اطمینانشون به کوکی بیشتر بشه!

و صد در صد حرف شما در مورد در نظر گرفتن همه جوانب درسته و اگر غیر از این باشه غلطه!

golnaz99
شنبه 01 اردیبهشت 1386, 13:16 عصر
سلام
اوا بگم که من چرا همه کدهام را در pageload قرار دادم.
چون که من از یک دیتا گرید برای طراحیه فروشگاه استفاده کردهام و در واقع دکمه خرید من به صورت زیر است


<input type="image" alt="<%#Eval("number")%>" src="Images/btn_addtocart.gif" name="btnBuy_<%#Eval("number")%>">

که در کدهای pageload به صورت زیر کلیک بر روی دکمه خرید تشخیص داده میشود


Dim iID_Item As Integer = 0
For Each s As String In Me.Request.Form
If s.StartsWith("btnBuy_") Then
iID_Item = CInt(s.Substring(7, s.Length - 9))
Exit For
End If
Next
If iID_Item <= 0 Then
Me.f_ID_Item.Text = "ىیچ ™ی¢êی ں뢦ں 묧ى!"
Me.f_Qty.Text = "- - -"
Else
Me.f_ID_Item.Text = CStr(iID_Item)
Me.f_Qty.Text = Me.Request.Form("fQty_" & CStr(iID_Item))


پس من مجبورم کدهای چک کردن ip و غیره را در pageload قرار دهم.
که به صورت زیر این کار را انجام میدهم



Dim ClientIPAdress As String = ""
ClientIPAdress = Request.ServerVariables("HTTP_X_FORWARDED_FOR")
If ClientIPAdress = Nothing Then
ClientIPAdress = Request.ServerVariables("REMOTE_ADDR")
End If
'******************
con.Open()
strsql = "SELECT * FROM sabadkharid where ipuser='" & ClientIPAdress & "'"
cmd = New SqlCommand(strsql, con)
dr = cmd.ExecuteReader
If dr.Read() Then
id1 = ClientIPAdress

کدهای ایجاد کوکی را هم در فایل global قرار دادم


Sub Application_Start(ByVal sender As Object, ByVal e As EventArgs)
Dim c As New HttpCookie("ShoppingCart")
c.Value = Guid.NewGuid().ToString()
c.Expires = DateTime.Now.AddHours(1)
Response.Cookies.Add(c)
End Sub

مراحل دیگر کارم برای تشخیص IP کاربر و خواندن کوکی هم به صورت زیر است


con.Open()
strsql = "SELECT * FROM sabadkharid where ipuser='" & ClientIPAdress & "'"
cmd = New SqlCommand(strsql, con)
dr = cmd.ExecuteReader
If dr.Read() Then
id1 = ClientIPAdress

'*********************


Else
c = Request.Cookies("ShoppingCart")
If Not Request.Cookies("ShoppingCart") Is Nothing Then
id1 = c.Value
'id1 = ClientIPAdress
Else
Dim c As New HttpCookie("ShoppingCart")
c.Value = Guid.NewGuid().ToString()
c.Expires = DateTime.Now.AddHours(1)
Response.Cookies.Add(c)
id1 = c.Value
End If
End If
con.Close()
cmdselect = New SqlCommand("select *from sabadkharid", con)
insertsql = "insert into sabadkharid(ipuser,idkala,flag)"
insertsql &= "values('" & id1 & "','" & f_ID_Item.Text & "','" & 0 & "')"
cmdselect = New SqlCommand(insertsql, con)
con.Open()
cmdselect.ExecuteNonQuery()
con.Close()

در واقع من هر دفعه IP را چک میکنم اگر وجود داشت که مشکلی نیست ولی اگر وجود نداشت
مقدار کوکی را میخوند اگر کوکی را خوند مقدار کوکی را به جای IP کاربر قرار میدهد.ولی اگر چیزی نخوند یه کوکی جدید میسازد و این مقدار جدید را به جای IP کاربر قرار میدهد.
ولی اینطوری همیشه مقدارGUID که (هر دفعه هم تغییر میکند )به جای IP قرار میکند.
مشکل کار چیه؟البته فکر میکنم که من هنوز با کوکی ها مشکل دارم.
درر ضمن بازیابی جدول سبد خرید چه طوریه؟
وقتی یه رکورد داریم که مقدار IP اش با رکورد دیگر متفاوته ولی هر دو متعلق به یک کاربر است چه طوری کالا ها را بازیابی کنیم؟
نباید کالا ها را در یک ارایه ای و یا چیزی شبیه این ذخیره کنیم؟

Alireza_Salehi
شنبه 01 اردیبهشت 1386, 17:49 عصر
اگر از IP استفاده می کنید دیگه نیازی به کوکی و GUID نیست!
البته مشکلش اینه که اگه IP کاربر عوض بشه دیگه نمیشه سبد خریدش رو پیدا کرد. (راه حلش اینه که از کوکی + GUID استفاده کنید)

اگر از کوکی و GUID استفاده می کنید دیگه نیازی به IP نیست!
این هم مشکلش اینه که باید خرید از یک کامپیوتر انجام بشه و اگر ادامه خرید از جای دیگه انجام بشه دیگه نمیشه محتویات کوکی رو خوند و سبد خرید از بین میره.

در واقع فکر نمی کنم راهی وجود داشته باشه تا کاربران غیر عضو (ناشناس) بتونند از یه جای دیگه یا با یک IP دیگه خریدشون رو ادامه بدند! (البته این هم یک راه داره (عضویت نصفه نیمه که البته جای بحث داره) میتونید به هر کاربر وقتی شروع به خرید میکنه GUID ش رو نشون بدید و بگید هر وقت خواست خریدش رو از جای دیگه ادامه بده این GUID رو باید وارد کنه تا سبد خرید قبلیش پیدا بشه و ادامه کار انجام بگیره)

در ضمن کلید اصلیه شما تو جدول سبد خرید چیه؟ نمیشه که هم IP دارید هم GUID و هم کوکی باز هم در پیدا کردن سبد خرید یک کاربر مشکل دارید!

اگر تنها استفاده GUID در سایت شما شناسایی سبد خرید است لزومی به استفاده از Global.asax نیست.

در ضمن این روش شما برای تشخیص کلیک اصلا صحیح نیست (راه خیلی راحت تری هست)، یه دیتا گرید به این صورت بسازید :


<asp:DataGridID="DataGrid1"runat="server">
<Columns>
<asp:TemplateColumn>
<ItemTemplate>
<asp:ButtonID="Button2" runat="server" Text="Button" CommandName="kharid" CommandArgument="<%#Eval("number")%>"/>
</ItemTemplate>
</asp:TemplateColumn>
</Columns>
</asp:DataGrid>

بعد در رویداد Item_Command کنترل GridView این طوری عمل کنید:


ProtectedSub DataGrid1_ItemCommand(ByVal source As Object, ByVal e As System.Web.UI.WebControls.DataGridCommandEventArgs )
If e.CommandName = "kharid" Then
'عملیات مورد نظر
EndIf
EndSub


با e.CommandArgument هم به آرگومانی که بهش دادید دسترسی دارید.

اصلا برنامه نویسی رو بذارید کنار و منطق هر کدوم این ها رو دقیق در بیارید بعدا کد بنویسید، آزمون و خطا در کد نویسی اصلا روش خوبی نیست.

نکته آخر این که وقتی کوکی دارید دیگه نه نیازی به GUID هست نه IP و نه حتی دیتابیس ! همه چی تو همون کوکی ذخیره میشه (البته یه ریزه کاری هایی داره).

golnaz99
شنبه 01 اردیبهشت 1386, 20:09 عصر
سلام دوست عزیز از اینکه مسئله را دنبال میکنید ممنون هستم راستش من تا حالا فکر میکنم که از کوکی و ip به طور همزمان استفاده میشود.حالا من نمیدونم چه طوری باید تشخیص بدهیم که از ip استفاده کنیم و یا کوکی؟شما کدام روش را ترجیح میدهیدما که نمیدونیم ip کاربر تغییر میکند و یا نه؟در ضمن ما این guid را به عنوان کوکی ذخیره میکنیم دیگه؟پس کوکی و guid جدا از هم نیستند درسته؟

golnaz99
یک شنبه 02 اردیبهشت 1386, 16:45 عصر
سلام
دوست عزیز واقعا شرمندتون هستم.میدونم خیلی شما را خسته کردم.
ولی راستش این کوکی و ip و guid پاک من را گیج کرده.
میشه بازم من را راهنمایی کنید

Alireza_Salehi
یک شنبه 02 اردیبهشت 1386, 20:28 عصر
والا منم گیج شدم!

مطالبی که تا حالا گفتم در پست های دوستان با لحن دیگه ای گفته شده بود ، یک بار دیگه همه چیز رو از اول بخونید ، فکر نمیکنم چیز مبهمی مونده باشه!


ولی راستش این کوکی و ip و guid پاک من را گیج کرده.

از اول به موضوع دقت نکردید ، تو همون تاپیکی که سوال ها از اون شروع شد آقای راد یک ساختار ساده پیشنهاد دادند که کاملا واضح و بدون ابهام روش استفاده از IP رو شرح دادند.(این تاپیک پست شماره 2 (http://www.barnamenevis.org/forum/showthread.php?t=29768&p=150889)) در اینجا اصلا اثری از GUID نیست!
کلید اصلی جدول شما در اینجا ترکیب IP با مثلا کد کالا است البته بستگی به منطق طراحی سبد خرید داره (ولی حتما IP توش هست) !!!

حالا اگر بخواهید ا GUID استفاده کنید یه کوکی رو سیستم کاربر با مقدار GUID ذخیره میکنید، حالا به جای چک کردن IP کاربر کوکی رو چک میکنید و اگر موجود بود GUID که قبلا توش ذخیره شده می خونید و دیگه GUID جدید نمیسازید، در این حالت هم کلید اصلی جدول شما ترکیب GUID با مثلا کد کالا است البته بستگی به منطق طراحی سبد خرید داره (ولی حتما GUID توش هست) !!!

حالا یک بار مرحله به مرحله این دو روش رو چک میکنیم:

IP:
کاربر وارد سایت میشه ،هر وقت دکمه خرید رو در هر جایی زد ، اول IP ش رو بدست میارید ، بعد کد کالا + آی پی + هر چیز دیگه که دوست داشتید رو در دیتابیس ذخیره میکنید،
برای نمایش سبد آی پی کاربر رو بدست میارید ، جول رو بر اساس آی پی جستجو میکنید ، تمام رکورد هایی که بدست میاد مربوط به این کاربر هستند!

GUID:
کاربر وارد سایت میشه ، هر وقت دکمه خرید رو زد چک می کنید آیا کوکی وجود دارد یا نه اگر وجود ندارد یک کوکی میسازید و داخلش یک GUID جدید میریزید، و برای افزودن کالا به جدول به جای آی پی از این GUID استفاده می کنید، ولی اگر کوکی وجود داشت یعنی قبلا خرید انجام شده پس از داخل کوکی GUID که قبلا ایجاد کردید رو می خونید و به جای ساختن GUID جدید از این مقدار ذخیره شده در کوکی برای افزودن به سبد خرید استفاده می کنید.براای نمایش سبد جدول رو بر اساس GUID موجود در کوکی جستجو می کنید.

واضح تر از این دیگه نمی شه گفت !

باز هم میگم این روش ها برای کاربران ناشناس هست در صورت وجود عضویت همه این کارها با نام کاربری (username) انجام میشه!

دوستان اگر مشکلی در این روشها می بینند لطفا بگن، شاید من خوب توضیح نمیدم !

davood_mir
یک شنبه 02 اردیبهشت 1386, 21:59 عصر
سلام:
قبلا هم یکی از د.ستان پرسیده بود که اگر یک کافی نت یا isp از nat استفاده کنند آنگاه ip تمام کاربران متصل شده از آن کافی نت یکسان است . آیا این مشکلی در استفاده از ip ایجاد نمی کنه؟

golnaz99
دوشنبه 03 اردیبهشت 1386, 16:41 عصر
سلام
بعد از کلی زحمت دادن به شما بالاخره من از کوکی استفاده کردم.مشکل اصلیه من هم این بود که فکر میکردم که از کوکی و ip همزمان استفاده میشود...
حالا یه مشکلی در نمایش دادها ی سبد خرید دارم .ببینید من سبد خرید را برحسب مقدار guid جستجو میکنم و idkala ها را استخراج میکنم ولی نمیدونم که این idkala ها را در کجا ذخیره کنم که با استفاده از اون سبد خرید را در یک gridview به کاربر نشون بدهم.اصلا idkalaها را باید در جایی ذخیره کنم؟

Alireza_Salehi
دوشنبه 03 اردیبهشت 1386, 20:17 عصر
واقعا خیلی خیلی جالبه!!!

idkala رو ذخیره نکنید از کجا می خواهید بفهمید کی چی خریده؟:متعجب:


این idkala ها را در کجا ذخیره کنم

اصلا idkalaها را باید در جایی ذخیره کنم؟

در پست قبلی جواب سوالتون داده شده ، فقط یه ریزه با دقت بخونید.


یواش یواش دارم احساس میکنم این تاپیک سر کاریه! :عصبانی:

این چیزهایی که می پرسید ربطی به ASP.NET نداره ، اینها منطق برنامه هستند ، الگوریتم برنامه هستند ، مثل این که شما مفهوم سبد خرید رو متوجه نشدید هنوز!

golnaz99
دوشنبه 03 اردیبهشت 1386, 23:32 عصر
سلام دوست عزیز اشتباه نشود.مطمئنا میدونم که idkala را باید در دیتابیس ذخیره کرد.اخه اگر idkala را در دیتابیس ذخیره نکنیم که سبد خرید مفهومی ندارد.مشکلم مرحله بعد بود یعنی وقتی که میخواهیم در جدول سرچ کنیم و کالاهای خریداری شده را از جدول استخراج کنیم.من فکر کردم که idkalaهای استخراج شده از دیتابیس را باید در یک جایی مثلا ارایه ذخیره کنیم تا براساس ان کالاها را نمایش دهیم ولی دقیقا نمیدونستم چیکار باید بکنم.
من ادم کم دقتی هستم ولی خدایی کسی را سر کار نمیذارم.اون هم شما که بی نقص ادم را راهنمایی میکنید
ببخشید که منظورم را بد بیان کرده بودم

Alireza_Salehi
سه شنبه 04 اردیبهشت 1386, 10:20 صبح
لزومی نداره کد کالا ها رو جایی ذخیره کنید،اگر از دیتابیس استفاده کرده باشید فقط و فقط با یک Query محتویات سبد خرید برای نمایش آماده میشه ، و مثلا در یک GridView نمایش داده میشه (با استفاده از عملگر JOIN)!

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

fereshte22
دوشنبه 24 اردیبهشت 1386, 12:39 عصر
سلام
من درجدول سفارشات اطلاعاتی از قبیل نام مشتری و id مشتری و مبلغ خرید و غیره را ذخیره کرده ام.حالا مشکلم در مورد ذخیره اطلاعات مربوط به کالاهای خریداری شده است.(شامل نام کالا و تعداد کالای خریداری شده )من این اطلاعات را در جدول سبد خرید دارم و وقتی دکمه خرید نهایی زده میشود این اطلاعات از جدول سبدخرید حذف میشود.
حالا مشکلم اینه اگه مثلا یه مشتری در یک سفارش مثلا 20تا کالای متفاوت خرید کندباید 20تا رکورد در جدول سفارش داشته باشیم ؟(در هر رکورد اطلاعات نام مشتری و مبلغ کل خرید ثابت باشند ولی اطلاعات مربوط به نام کالا و تعداد کالامتفاوت باشد)
آیابا افزایش سفارشات مشکل ایجاد نمیشود؟
ایا باید از یک جدول مجزا برای اطلاعات مربوط به کالاها ی خریداری شده در هر سفارش استفاده کردکه بایک id که همان شماره سفارش است به جدول سفارشات اصلی ارتباط داشته باشد؟
کسی راه بهتری سراغ ندارد؟

__H2__
دوشنبه 24 اردیبهشت 1386, 14:53 عصر
سلام
با اجازه کاربر arsp_2004 (http://www.barnamenevis.org/forum/member.php?u=33355)
من خودم همیشه از دو جدول استفاده میکنم. یک جدول Sales شامل اطلاعات کلی هر فروش (نام، تاریخ، آدرس، تلفن و...) و یک جدول Sales_Goods که حاوی جزییات هر خرید است (شماره کالا، تعداد و قیمت (شاید بعد از خرید مشتری قیمت ها عوض شوند!)) و در اصل جدول Sales_Goods یک رابطه یک به چند با جدول Sales و جدول Goods دارد.

جدول Goods شامل اطلاعات کالاها است که حتما شما هم همچین جدولی دارید (شماره کالا، نام، قیمت خرید و فروش و مسیر عکس و توضیحات و...)

Alireza_Salehi
دوشنبه 24 اردیبهشت 1386, 19:55 عصر
سلام
با اجازه کاربر arsp_2004 (http://www.barnamenevis.org/forum/member.php?u=33355)
من خودم همیشه از دو جدول استفاده میکنم. یک جدول Sales شامل اطلاعات کلی هر فروش (نام، تاریخ، آدرس، تلفن و...) و یک جدول Sales_Goods که حاوی جزییات هر خرید است (شماره کالا، تعداد و قیمت (شاید بعد از خرید مشتری قیمت ها عوض شوند!)) و در اصل جدول Sales_Goods یک رابطه یک به چند با جدول Sales و جدول Goods دارد.

جدول Goods شامل اطلاعات کالاها است که حتما شما هم همچین جدولی دارید (شماره کالا، نام، قیمت خرید و فروش و مسیر عکس و توضیحات و...)

حرف شما کاملا درسته ولی ، این دیگه برمیگرده به منطق برنامه نویسی شما و به طراحی گردش داده ها و ... برای فروشگاه مورد نظر و ارتباطی با ASP.NET نداره - فکر کنم اگر این سوال ها رو در تالار مهندسی نرم افزار مطرح کنیدخیلی بهتر باشه!
من هم از همین روش استفاده میکنم ولی با چند تا فیلد اضافه تر ، مثلا ممکنه حتی درصد تخفیف هم تغییر کنه و ... !

federrer
شنبه 21 مهر 1386, 12:02 عصر
با تشکر فراوان از arsp_2004 .
من کل داستان رو خوندم .عجب حوصله ای داره این arsp_2004 .

لپ مطلب از این بحث طولانی رو نقل قول می کنم :



اگر از IP استفاده می کنید دیگه نیازی به کوکی و GUID نیست!
البته مشکلش اینه که اگه IP کاربر عوض بشه دیگه نمیشه سبد خریدش رو پیدا کرد. (راه حلش اینه که از کوکی + GUID استفاده کنید)
اگر از کوکی و GUID استفاده می کنید دیگه نیازی به IP نیست!
این هم مشکلش اینه که باید خرید از یک کامپیوتر انجام بشه و اگر ادامه خرید از جای دیگه انجام بشه دیگه نمیشه محتویات کوکی رو خوند و سبد خرید از بین میره.




و توضیح بیشتر :




حالا یک بار مرحله به مرحله این دو روش رو چک میکنیم:
IP:
کاربر وارد سایت میشه ،هر وقت دکمه خرید رو در هر جایی زد ، اول IP ش رو بدست میارید ، بعد کد کالا + آی پی + هر چیز دیگه که دوست داشتید رو در دیتابیس ذخیره میکنید،
برای نمایش سبد آی پی کاربر رو بدست میارید ، جول رو بر اساس آی پی جستجو میکنید ، تمام رکورد هایی که بدست میاد مربوط به این کاربر هستند!
GUID:
کاربر وارد سایت میشه ، هر وقت دکمه خرید رو زد چک می کنید آیا کوکی وجود دارد یا نه اگر وجود ندارد یک کوکی میسازید و داخلش یک GUID جدید میریزید، و برای افزودن کالا به جدول به جای آی پی از این GUID استفاده می کنید، ولی اگر کوکی وجود داشت یعنی قبلا خرید انجام شده پس از داخل کوکی GUID که قبلا ایجاد کردید رو می خونید و به جای ساختن GUID جدید از این مقدار ذخیره شده در کوکی برای افزودن به سبد خرید استفاده می کنید.براای نمایش سبد جدول رو بر اساس GUID موجود در کوکی جستجو می کنید.



اگر اجازه بدید در مورد جدولهای لازم من هم یه پیشنهاد بدم :

1- اطلاعات کالا: که فیلدهای اون :
idkala (PK)- namekalaو ......

2- مشتری : که فیلدهای اون :
(namemoshtari - idmoshtari (PK و ....

3- فاکتور : که فیلدهای اون :
(idkala - idmoshtari- idfactor (PK و ....

که idmoshtari از مشتری و idkala از اطلاعات کالا به فاکتور پاس داده میشود و می تونیم اینجوری به اطلاعات جدولهای مشتری و اطلاعات کالا هم در فرم فاکتور استفاده کنیم.

با تشکر.