PDA

View Full Version : نحوه ذخیره اطلاعات حتی در صورت بسته شدن صفحه



arsalansalar
سه شنبه 24 اردیبهشت 1387, 15:01 عصر
من در حال آماده کردن یک پروژه دانشگاهی فروشگاه اینترنتی هستم.
حتما زمانی که از یک فروشگاه اینترنتی خرید میکنید دیده اید که یک صفحه باز می شود و اقلامی که شما خرید کردید را نمایش می دهدو حتی اگر صفحه راببندید و یک جنس ذیگر خرید کنید باز هم اقلام خریداری شده توسط شما را نمایش می دهد.
من راجع به نحوه نوشتن همچین برنامه ای به توضیح نیاز دارم.
اگر دوستان لطف کنند ممنون می شوم.

twelve
سه شنبه 24 اردیبهشت 1387, 15:07 عصر
از سشن استفاده کنید ! همین ;-)

arsalansalar
سه شنبه 24 اردیبهشت 1387, 15:19 عصر
راستش من این تایپیک و دیدم:
http://barnamenevis.org/forum/showthread.php?t=105457
ولی اون چیزی که من می خواهم نیست.
در واقع من نمی دانم چیئ در sesion ذخیره کنم که آن را به عنوان کلید نگه دارم که بعدا از آن استفاده کنم.
اگر شما تجربه این کار را دارید می شود لطف کنید و آن را در اختیار من بگزارید؟

arsalansalar
چهارشنبه 25 اردیبهشت 1387, 08:40 صبح
دوست عزیز من یا استفاده از کدهای شما که در زیر آمده است تقریبا یک برنامه نوشتم.
ولی مشکل من این است که با بسته شدن صفحه و ورود به صفحه جدید دیگر اطلاعات قبلی را نمایش نمی دهد.


Dim ID AsInteger = Val(TextBox1.Text)
Session.Add("UserID", ID)
Response.Redirect("Default16.aspx")

در کد بالا id جنس انتخاب شده توسط کاربر در یک session ذخیره شده و کاربر به صفحه Default16.aspx وارد می شود.


Sub BindGrid()
Dim ID AsInteger
ID = Session("UserID")
con = New OleDbConnection(String.Format("provider = microsoft.jet.oledb.4.0 ; data source = {0}", Server.MapPath("~") + "\App_Data\database.mdb"))
Dim da As OleDbDataAdapter
Dim ds As DataSet
strSelect = "SELECT * FROM pro WHERE ID = " & ID
da = New OleDbDataAdapter(strSelect, con)
ds = New DataSet()
da.Fill(ds)
DataGrid1.DataSource = ds
DataGrid1.DataBind()

EndSub
ProtectedSub Page_Load(ByVal sender AsObject, ByVal e As System.EventArgs) HandlesMe.Load
IfNot Page.IsPostBack Then
IfNot Session("UserID") IsNothingThen
BindGrid()
Else
Response.Redirect("Default2.aspx")
EndIf
EndIf
EndSub

با کد بالا id جنس خوانده می شود و اطلاعات آن نمایش داده می شود.
بر فرض عدد2 در textbox1 وارد می شود و اطلاعات آن در صفحه 16 نمایش داده می شود .
مشکل من این است که اگر کاربر صفحه راببندد و اینبار عدد3 را وارد کند فقط اطلاعات مربوط به id عدد 3 نمایش داده می شود.
من می خواهم اطلاعات هم عدد3 و هم عدد2 نمایش داده شود.
اگر کمک کنید ممنون می شوم.

raravaice
چهارشنبه 25 اردیبهشت 1387, 09:57 صبح
وقتی صفحه بسته میشه در اصل کوکی مربوط به session id از بین میره و شما دیگه نمیتونی اطلاعات سابق رو داشته باشی.

برای این کار مستقیم از خود کوکی استفاده کن و تاریخ expire اونو تنظیم کن که با بسته شدن صفحه بازم باقی بمونه.


موفق باشید

arsalansalar
چهارشنبه 25 اردیبهشت 1387, 10:02 صبح
وقتی صفحه بسته میشه در اصل کوکی مربوط به session id از بین میره و شما دیگه نمیتونی اطلاعات سابق رو داشته باشی.

برای این کار مستقیم از خود کوکی استفاده کن و تاریخ expire اونو تنظیم کن که با بسته شدن صفحه بازم باقی بمونه.


موفق باشید
با سلام
منظور من را متوجه نشدید(هدف من از ایجاد تایپیک نحوه پاک کردن session ها نیست)
مشکل من این است که فقط اطلاعات یک جنس را می توانم برگردانم.
یکی از دوستانم گفت اول با رشته باید اینها را به هم بچسبونی.
مثلا بشه
1&2&3...بعد با indexof کاراکتر & را بداری و در آخر query بگیری.
ممنون می شوم اگر من را راهنمایی کنید.

raravaice
چهارشنبه 25 اردیبهشت 1387, 10:09 صبح
مشکل من این است که فقط اطلاعات یک جنس را می توانم برگردانم.

من گفتم بجای اینکه id رو توی session ذخیره کنی تو کوکی ذخیره کن


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

راست گفته.;)


بعد با indexof کاراکتر & را بداری و در آخر query بگیری.

1. از & استفاده نکن مگر اینکه htmlencode کنیش ولی بهتره از , یا ; استفاده کنی.
2.از split به جای indexof استفاده کن چون با یه رشته مرتب سروکار داری که کاراکتر جدا کننده داره.


موفق باشید

Alireza_Salehi
چهارشنبه 25 اردیبهشت 1387, 10:15 صبح
با توجه به کدهای پست 4 (http://barnamenevis.org/forum/showpost.php?p=516187&postcount=4):
وقتی یک متغییر را در قسمت های مختلف مقدار دهی کنید آیا مقادیر قبلی آن متغییر باقی می ماند؟ Session مثل یک متغییر است باید چک کنید اگر خالی بود مقداردهی کنید و اگر پر بود مقادیر جدید را به مقادیر قبلی اضافه کنید.
تا اینجاش اصلا ربطی به باز وبسته بودن مرورگر نداره.

نکته دیگه این که ماهیت Session اینه که بعد از پایان یافتن زمانش از بین میره، بستن مرورگر هم باعث از بین رفتنش میشه.

بنابراین همون طور که در پست 5 دوستان گفتند شما بهتره از کوکی یا دیتابیس برای نگهداری اطلاعات (به صورت پایدار) استفاده کنید.

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

arsalansalar
چهارشنبه 25 اردیبهشت 1387, 10:16 صبح
من گفتم بجای اینکه id رو توی session ذخیره کنی تو کوکی ذخیره کن



راست گفته.;)



1. از & استفاده نکن مگر اینکه htmlencode کنیش ولی بهتره از , یا ; استفاده کنی.
2.از split به جای indexof استفاده کن چون با یه رشته مرتب سروکار داری که کاراکتر جدا کننده داره.


موفق باشید
منم مشکلم چسبوندن این رشتها به هم هست.
چه جوری باید این کار و بکنم؟اگر با کدهای خودم یک مثال بگید ممنون می شوم.

raravaice
چهارشنبه 25 اردیبهشت 1387, 10:39 صبح
کوکی ایجاد شده رو بررسی کن اگر وجود نداشت اولین id رو بنویس و دفعات بعد اول علامت بعد id رو بزار همنجوری برو تا آخر.
ادغام رشته ها !!!!
وقتی به مسئله به صورت پیچیده نگاه میکنی راه حل های ساده یادت میره.

موفق باشید

arsalansalar
چهارشنبه 25 اردیبهشت 1387, 11:10 صبح
یک سواله دیگه.
با session هم می شود این کارهای را که گفتید انجام داد؟

raravaice
چهارشنبه 25 اردیبهشت 1387, 11:16 صبح
آره.
ولی وقتی صفحه رو ببندی از بین میره.

موفق باشید

twelve
چهارشنبه 25 اردیبهشت 1387, 11:19 صبح
ولی وقتی صفحه رو ببندی از بین میره.
سشن با بستن صفحه از بین میره ؟!
اینجوری نیستا! سشن عمر مشخصی داره

arsalansalar
چهارشنبه 25 اردیبهشت 1387, 11:28 صبح
کوکی ایجاد شده رو بررسی کن اگر وجود نداشت اولین id رو بنویس و دفعات بعد اول علامت بعد id رو بزار همنجوری برو تا آخر.
ادغام رشته ها !!!!
وقتی به مسئله به صورت پیچیده نگاه میکنی راه حل های ساده یادت میره.

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


If Session("UserID") Is Nothing Then
Session.Add("UserID", ID)
Else
Session.Add("&" & "UserID", ID)
End If
End If

raravaice
چهارشنبه 25 اردیبهشت 1387, 11:36 صبح
سشن با بستن صفحه از بین میره ؟!
اینجوری نیستا! سشن عمر مشخصی دارهوقتی کلید session که توی کوکی ASP.NET_SessionId ذخیره میشه با بسته شدن صفحه از بین بره شما چطور میخوای اطلاعات رو از سرور بگیری؟
مگر زمان expire این کوکی رو متناسب با زمان session زیاد کنی.


آیا مشکل از کد من هست؟


If Session("UserID") Is Nothing Then
Session("UserID")=ID & ","
Else
Session("UserID") &= ID & ","
End If
End If
موفق باشید

arsalansalar
چهارشنبه 25 اردیبهشت 1387, 11:53 صبح
من کد شما را نوشتم ولی کارکترها به هم چسبیده.مثل عکس پایین.
کد زیر را هم برای split استفاده کردم.اگر مشکلی در کدم هست لطف کنید و به من توضیح بدهید.
با تشکر فراوان از شما.


Dim str AsString = TextBox1.Text
Dim array() AsString
array = str.Split(",")
TextBox2.Text = array(UBound(array))

raravaice
چهارشنبه 25 اردیبهشت 1387, 12:09 عصر
یا کامپایلر شما خیلی حساسه به مقادیر integer و string یا یه جای کارو خراب کردی.

مقدار id رو به string تبدیل کن بعد الحاقش کن ببین درست میشه؟!

موفق باشید

arsalansalar
چهارشنبه 25 اردیبهشت 1387, 12:18 عصر
اگر راجع به split آن هم کد بگزارید ممنون می شوم.:بامزه:

raravaice
چهارشنبه 25 اردیبهشت 1387, 12:53 عصر
کدی که نوشته درسته!
بعد از اینکه str رو split کردی هر id توی یکی از index های array قرار میگیره حالا با for each یا for next از صفر تا اندازه آرایه -1 ایندکس شماری کن و مقادیر رو الحاق کن به textbox2

موفق باشید

arsalansalar
چهارشنبه 25 اردیبهشت 1387, 12:58 عصر
میشه لطف کنید یک دستور for each این را بزارید؟
چون با کدی که من نوشتم هی خطا می گیرد

sadegh.rj
چهارشنبه 25 اردیبهشت 1387, 22:43 عصر
به نظر من بهتره از profile استفاده کنی خیلی راحت تره

arsalansalar
شنبه 28 اردیبهشت 1387, 08:05 صبح
نمیشه یک مثال از حلقه این بزنید.
چون ماله من همش خطا می گیرد.