PDA

View Full Version : بررسی تابع ساخته شده و رفع مشکل تابع ( آیا مقدار متغییرهای فراگیر در بین کاربران تغییر میکند؟)



mostafa_tak2000
جمعه 07 شهریور 1393, 12:48 عصر
سلام به همه دوستان
مشکل من اینجاست که در یکی از سایتهایم برای اینکه مقادیر متغییر را در طول کار کاربر نگهداری نمایم در کلاس اصلی متغییری ساختم مانند دستور زیر
Public Shared name As String
به طور مثال من قبل از اینکه کاربر وارد فرم ثبت نام شود خواستم که نامش را وارد نموده روی دکمه کلیک کند این دکمه نام کاربر را در این متغییر ریخته ودر فرم بعد در تکس باکس مربوطه نمایش داده میشود. و کاربر اطلاعات بعدی فرم را تکمیل و ذخیره می شود . به نظر من هیچ مشکلی نداشتم و روال کار عملا هم صحیح بود ولی مشکل روزی پیدا شد که کاربران مختلف از نقاط مختلف کشور در سایت ثبت نام کردند و چند روز بعد بعضی از کاربران تماس میگرفتند که مشخصات من همه درست است ولی نام ونام خانوادگی برای من نیست . وقتی پیگیر شدم و بررسی کردم متوجه شدم که مثلا کاربر A در این زمان نام خود را وارد کرده مثلا محمد و رفته فرم بعد را تکمیل کند در این زمان کاربر B وارد فرم اول شده و نام خود را وارد کرده مینا و ایشان نیز وارد فرم ثبت نام شده هردوی ایشان با فشردن دکمه ثبت نام ثبت نام شده اند ولی جالب اینجاست که نام کاربر A مینا ذخیره شده و کاربر B هم مینا می باشد مگر بعد از کاربر B کاربر C نیز وارد شده باشد و نام دیگری ثبت نماید .
دوستان میشه بگید مشکل من کجا بوده ؟ آیا وقتی کاربری وارد سایت میشود و مقداری را به متغییر ی میدهد این مقدار بعداز وارد شدن کاربر دیگری به سایت قابل تغییر است . من نمونه کد زیر را نیز برای بررسی بیشتر دوستان خدمتتون ارسال میکنم

Imports System.Data.SqlClient
Public Class connection
Public Shared Function ExcecutNonQuery2(ByVal sqlstr As String) As Integer
Dim mconnection As SqlConnection = New SqlConnection(System.Configuration.ConfigurationMa nager.ConnectionStrings("DBConnectionString").ToString)
Dim cmd As New SqlCommand(sqlstr, mconnection)
Dim retval As Integer
mconnection.Open()
Try
retval = cmd.ExecuteNonQuery()
Catch ex As Exception

End Try
Return retval

End Function
Public Shared Function addtest(cod As Integer) As Integer
Return ExcecutNonQuery2("insert into sex (idsex) values ('" & cod & "')")
End Function
Public Shared name As String
End Class

uthman
جمعه 07 شهریور 1393, 22:51 عصر
در رویداد application_start در Global.asax یک session اضافه کن به ازاری هر کاربر و اسم کاربر رو تو این session قرار بده . البته این روش اصلا بهینه نیست .
میتونی از muti view استفاده کنی دیگه لازم نیست اسم رو تو یه متغیر استاتیک قرار بدی و در form_load بهش دسترسی هم داری .
البته می تونی از viewState هم استفاده کنی . ولی استفاده نادرست از ViewState باعث افزایش حجم وب سایتت می شه .
و یا اینکه از کوکی استفاده کنی و بعد از اینکه کارت تموم شد کوکی رو پاک کنی .
در کل راه های بسیاری هست که به نتیجه بررسی ولی منطقی و بهینه ترین و انتخاب کن .
کار کردن با متغییر های استاتیک دقت زیادی می خواد و خیلی استفاده از متغییر استاتیک پیشنهاد نمیشه .

mortezagt
جمعه 07 شهریور 1393, 23:31 عصر
منم همین مشکل رو دارم
کیست ما را یاری کند