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


  • ذخيره تمامی اطلاعات کاربران بعنوان يک کوکی بر روی ماشين سرويس گيرنده. استفاده از روش فوق ، درموارديکه اطلاعات کاربر ساده بوده و سرويس دهنده ضرورتی به استفاده از آنان بمنظور تکميل عمليات خود نداشته باشد ، می تواند مفيد باشد .
  • ذخيره يک کليد شناسائی بر روی ماشين سرويس گيرنده و بازيابی ساير اطلاعات کاربر از طريق يک منبع داده بر روی سرويس دهنده با توحه به کليد شناسائی .

در ادامه به بررسی هر يک از رويکردهای فوق ، خواهيم پرداخت.
ذخيره سازی اطلاعات کاربران بر روی سرويس گيرنده
برای ذخيره يک کوکی بر روی ماشين سرويس گيرنده ، مراحل زير را دنبال می نمائيم :


  • بررسی و حصول اطمينان از توانائی سرويس گيرنده بمنظور پذيرش کوکی ( استفاده از خصلت Cookies مربوط به شی مرورگر) .
  • در صورت حمايت سرويس گيرنده از کوکی ، بررسی وجود کوکی بر روی ماشين سرويس گيرنده ( استفاده از مجموعه Cookies مربوط به شی Request )
  • در صورت عدم وجود کوکی ، ايجاد يک کوکی جديد با استفاده از کلاس HttpCookie .
  • مقداردهی مناسب خصلت های Expiration و Value .
  • افزدون شی Cookie به مجموعه Cookies مربوط یه شی Response .

برنامه زير( روتين مربوط به رويداد Page_Load ) ، نحوه ايجاد يک کوکی و تشخيص آخرين مرتبه ملاقات سايت توسط کاربر را نشان می دهد.در برنامه فوق ، بررسی لازم در خصوص پديرش کوکی از طرف سرويس گيرنده ، صورت گرفته و در صورتيکه اولين مرتبه است که کاربر سايت را ملاقات می نمايد ، يک کوکی جديد ايجاد و در غير اينصورت ، کوکی ايجاد شده ، بهنگام می گردد.
VB.NET
Private Sub Page_Load ( ByVal Sender As System.Object , ByVal e As System.EventArgs ) Handles Mybase.Load
If Request.Browser.Cookies Then
If Request.Cookie ("LastVisit") Is Nothing Then
Dim CookLastVisit As New HttpCookie( " LastVisit" , Now.ToString ( ) )
CookLastVisit.Expires = DateTime.Now.AddDays( 1 )
Response.Cookie.Add (CookLastVisit )
Response.Write( " First Visit " )
Else
Dim CookLastVisit As HttpCookie = Request.Cookies ("LastVisit")
Reuest.Cookies( "LastVisit " )
Response.write ( "You last visited this page : " ,CookLastVisit.value )
Response.Cookies ( "LastVisit ").Value = Now.ToString ( )
Response.Cookies ( "LastVisit").Expires = DateTime.Now.AddDays(1)
End If
Else
Response.Write ( "Your Browser does not accept cookies . " )
End If
End Sub
کوکی ها نسبت به حروف بزرگ و کوچک حساس می باشند . مثلا" LastVisit مشابه کوکی Lastvisit نمی باشد .خصلت Expires ، نشاندهنده تاريخ مصرف کوکی می باشد. عمر يک کوکی بصورت پيش فرض ، محدود به زمانی است که Session کاربر خاتمه می يابد. درصورت تنظيم Expires بصورت DateTime.MaxValue ، اعتبار کوکی ايجاد شده، هرگز به اتمام نخواهد رسيد . بمنظور حذف کوکی از ماشين سرويس گيرنده ، می توان مقدار خصلت Expires را به زمان جاری تغيير داد .کد زير ، کوکی LastVisit را حذف می نمايد.
VB.NET
Private Sub Page_Load ( ByVal Sender As System.Object , ByVal e As System.EventArgs ) Handles butRemoveCookie.Click
Response.Cookies( "LastVisit").Expires = DateTime.Now
End Sub
استفاده از کليد بهمراه کوکی
يک کوکی ، قادربه ذخيره سازی 4096 بايت اطلاعات بوده و می توان بمنظور شناسائی اطلاعات همراه کوکی از کليد ها ، استفاده نمود. برنامه زير ، مشخصات کاربر را در يک کوکی با استفاده از کليدهای جداگانه ای ذخيره می نمايد .

VB.NET
Private Sub Page_Load ( ByVal Sender As System.Object , ByVal e As System.EventArgs ) Handles butOK.Click
Dim CookUserInfo As New HttpCookie ("UserInfo")
CookUserInfo("FirstName") = txtFirstName.Text
CookUserInfo("LastName") = txtLastName.Text
CookUserInfo("Street") = txtStreet.Text
CookUserInfo("City") = txtCity.Text
CookUserInfo("state") = drpstate.Selected.Item.value
CookUserInfo("Zip") = txtZip.Text
CookUserInfo.Expires = DateTime.Now.AddDays ( 30 )
Response.Cookies.Add( CookUserInfo )
End Sub
با استفاده از نام کليد ، می توان اقدام به بازيابی مقادير نسبت داده شده به هر يک از کليدهای ذخيره شده در کوکی نمود .
VB.NET
Private Sub Page_Load ( ByVal Sender As System.Object , ByVal e As System.EventArgs ) Handles butGetData.Click
Dim CookUserInfo As New HttpCookie ("UserInfo")
txtFirstName.Text = CookUserInfo("FirstName")
txtLastName.Text = CookUserInfo("LastName")
txtStreet.Text = CookUserInfo("Street")
txtCity.Text = CookUserInfo("City")
drpstate.Selected.Item.value = CookUserInfo("state")
txtZip.Text = CookUserInfo("Zip") = txtZip.Text
End Sub
ذخيره سازی اطلاعات کاربران بر روی سرويس دهنده
برای ذخيره اطلاعات کاربران بر روی سرويس دهنده ، می توان از کوکی بعنوان يک ابزار شناسائی ( ايندکس ) بمنظور ذخيره و بازيابی اطلاعات کاربران بر روی سرويس دهنده در يک بانک اطلاعاتی ، يک فايل XML و ساير امکانات ذخيره سازی داده ، استفاده نمود. برای ذخيره اطلاعات کاربران بر روی سرويس دهنده ، مراحل زير را دنبال می نمائيم :


  • ايجاد يک کليد منحصر بفرد بمنظور شناسائی کاربر
  • ذخيره کليد منحصر بفرد بعنوان يک کوکی بر روی ماشين کاربر
  • ايجاد يک فايل بر روی سرويس دهنده بمنظور ذخيره سازی اطلاعات کاربران
  • ذخيره اطلاعات کاربران بر روی سرويس دهنده با استفاده از کليد منحصربفرد بعنوان يک ايندکس

در ادامه به بررسی هر يک از مراحل فوق ، خواهيم پرداخت .

ايجاد کليدهای منحصر بفرد بمنظور شناسائی کاربران
فريمورک دات نت ، Namespace با نام System.Guid را بمنظور ايجاد شناسه های منحصربفرد سراسری ( GUID ) ارائه نموده است . GUID ، يک عدد صحيح 128 بيتی بوده که بعنوان شناسه ای منحصربفرد در شبکه ايفای وظيفه می نمايد . از GUID می توان بمنظور شناسائی تمامی چيزها از جمله کاربران استفاده نمود . کد زير ، يک GUID را ايجاد و آن را بعنوان يک کوکی بر روی کامپيوتر کاربر و بمنظور شناسائی وی در آينده ، ذخيره می نمايد .

VB.NET
Private Sub Page_Load ( ByVal sender As System.Object , ByVal e As System.EventArgs ) Handles butOK.Click
Dim cookUserID As HttpCookie = Request.Cookies ( "UserID")
If cookUserID Is Nothing Then
cookUserID = New HttpCookie ("UserID") , System.Guid.NewGuid ( ). ToString ( ) )
cookUserID.Name = "UserID"
End If
cookUserID.Expires = DateTime.Now.AddDays( 30 )
Response.Cookies.Add (cookUserID )
SetUserInfo (cookUserID.Value )
End Sub
ايجاد يک فايل بمنظور ذخيره اطلاعات کاربران
مهمترين هدف ذخيره سازی اطلاعات کاربران، بازيابی آنان با سرعت مناسب و پس از ملاقات مجدد کاربران از سايت و يا اجرای برنامه وب است . با توجه به اينکه اين نوع از کاربران با استفاده از يک کليدمنحصربفرد، شناسائی می گردند ، می توان چنين تصور نمود که دستيابی به داده از طريق يک Data set انجام خواهد شد. Data set ، با استفاده از متد Find ، قادر به بازيابی سطرهائی از داده بکمک کليدها ی منحصربفرد می باشد . استفاده از يک Data set ، بدان معنی است که فايل ايجاد شده بر روی سرويس دهنده ، می بايست يک بانک اطلاعاتی و يا يک فايل XML باشد . استفاده از فايل های XML در موارديکه داده های مورد نظر برای ذخيره سازی اندک بوده و روابط بين اقلام اطلاعاتی نيز پيچيده نباشد ، توصيه می گردد .
برای ايجاد يک فايل XML ، بمنظور ذخيره سازی اطلاعات کاربران ، مراحل زير را دنبال می نمائيم :


  • ايجاد يک فايل XML در ويژوال استوديو دات نت شامل داده تستی برای هر يک از فيلدهای داده که قصد ثبت آنان در ارتباط با کاربر وجود دارد .
  • ايجاد يک XML schema برای فايل XML ايجاد شده در مرحله قبل. با استفاده از XML schema ، يک Data Set قادر به مراجعه داده موجود در فايل XML بر اساس نام می باشد .
  • مشخص نمودن فيلد کليد در XML schema . بدين ترتيب،امکان يافتن رکوردهای استفاده کننده از فيلد فوق با استفاده از متد Find ،فراهم می گردد .
  • خواندن XML schema و فايل XML درون يک Data set .

ايجاد يک فايل XML
برای ايجاد يک فايل XML در ويژوال استوديو ، گزينه Add New Item را از طريق منوی Project انتخاب و در ادامه XML File را از طريق ليست تمپليت های نمايش داده شده ، انتخاب می نمائيم . فايل های XML ، شباهت زيادی به فايل های HTML داشته و در اين راستا تفاوت های مهمی نظير حساسيت نسبت به حروف بزرگ و کوچک و پيروی از يک گرامر خاص ، نيز وجود دارد. از تگ های <element> و <element / > بمنظور معرفی عناصر داده در يک فايل XML استفاده می گردد . کد زير، نحوه ايجاد يک فايل XML بمنظور ذخيره سازی مشخصات کاربر را نشان می دهد .

VB.NET
<?xml version="1.0" encoding="utf-8" ?>
<USERS xmlns="http://tempuri.org/userprefs.xsd">
<USER>
<FIRSTNAME> Ali </FIRSTNAME>
<LASTNAME> Irani </LASTNAME>
<STREET> Sabz </STREET>
<CITY> Tehran </CITY>
<STATE> Tehran </STATE>
<ZIP> 3240</ZIP>
<ID> 12345678 </ID>
</USER>
</USERS>
ايجاد يک XML Schema
بمنظور استفاده از فايل XML بهمراه يک Data Set ، می بايست در ابتدا يک XML Schema برای Data set ايجاد گردد. XML Schema ، مسئوليت تشريح عناصر داده ئی موجود در يک فايل XML را بر عهده دارد. XML Schema ، نام عناصر ، نوع آنان ،کليد بودن فيلد و ساير اطلاعات ضروری را ارائه می نمايد . برای ايجاد XML Schema از يک فايل XML ، زمانيکه فايل XML در پنجره طراحی ويژوال استوديو دات نت ، فعال است ، گزينه Create Schema را از طريق منوی XML ، انتخاب می نمائيم . در ادامه ، ويژوال استوديو دات نت ، فايل Schema را بمنظور تشريح فايل XML ايجاد می نمايد .

مشخص نمودن يک فيلد کليد
با افزودن يک کليد اوليه به XML Schema ، امکان جستجو فراهم خواهد شد .بدين منظور ، مراحل زير را دنبال می نمائيم :


  • کليک سمت راست بر روی عنصر مورد نظری که می خواهيم بعنوان فيلد کليد در نظر گرفته شود.انتخاب گزينه Add و در ادامه New Key . ويژوال استوديو ، جعبه محاوره ای Edit Key را نمايش خواهد داد .


  • گزينه Dataset Primary Key را انتخاب و دکمه OK را فعال می نمائيم . بدين ترتيب ، امکان استفاده از متد Find مربوط به شی DataSet بمنظور بازيابی سطرهائی از Data set ، فراهم می گردد.

خواندن XML درون يک Data Set
پس از ايجاد فايل XML و XML Schema ، امکان خواندن و ذخيره آن درون يک Data set ، فراهم می گردد. ( استفاده از متدهای ReadXml و ReadXmlSchema ) . برنامه زير ، تابعی را نشان می دهد که می توان از آن بمنظور برگرداندن يک Data Set از يک فايل XML با نام UserInfo ، استفاده نمود .

VB.NET
Function GetUserData ( ) As DataSet
Dim strPath As String = Server.MapPath( Request.ApplicationPath)
Dim dsUsers As New DataSet ( )
dsUsers.ReadXmlSchema ( strPath & "\UserInfo.xsd")
dsUsers.ReadXmlSchema ( strPath & "\UserInfo.xml")
Return dsUsers
End Function
ذخيره اطلاعات کاربر بر روی سرويس دهنده
بمنظور ذخيره سازی اطلاعات کاربران بر روی سرويس دهنده بصورت يک فايل XML ، می توان از متد SaveXML مربوط به شی Data set استفاده نمود. روتين SetUserInfo ( جدول زير ) ، از روتين GetUserData بخش قبل ،استفاده نموده تا يک Data set را از يک فايل XML دريافت نمايد. در ادامه ، با استفاده از متد Find ، بررسی لازم در خصوص وجود UserID در Data Set صورت می پذيرد.در صورتيکه UserID پيدا نگردد ، روتين SetUserInfo سطری را برای کاربر ( قبل از تنظيم مقادير متناظر با فيلدها از طريق کنترل های سرويس دهنده بر روی يک فرم وب )، اضافه می نمايد. در نهايت ، SetUserInfo ، تمامی داده را به سرويس دهنده برمی گرداند .

VB.NET
Sub SetUserInfo ( ByVal UserID As String )
Dim strPath As String = Server.MapPath( Request.ApplicationPath)
Dim dsUsers As DataSet = GetUserData ( )
Dim rowUser As DataRow = dsUsers.Tables("User") .Rows.Find( UserID)
If rowUser Is Nothing Then
rowUser = dsUsers.Tables ("User") . NewRow
dsUsers.Tables ( "User").Rows.Add ( rowUser )
End If
rowUser ("FirstName") = txtFirstName.Text
rowUser ("LastName") = txtLastName.Text
rowUser ("Street") = txtStreet.Text
rowUser ("City") = txtCity.Text
rowUser ("state") = drpstate.Selected.Item.Text
rowUser ("Zip") = txtZip.Text
rowUser ( "ID" ) = UserID
dsUsers. Writexml ( strPath & "\UserInfo.xml")
End Sub
بازيابی اطلاعات کاربران از يک Data Set
بمنظور بازيابی اطلاعات کاربران از فايل XML ، از روتين GetUIserData برای ايجاد يک Data Set از فايل XML استفاده می گردد . در ادامه ، می توان با استفاده از متد Find بمنظور بازيابی سطر مرتبط با UserID استفاده نمود . روتين GetUserInfo ( جدول زير) ، اطلاعات کاربر را از Data Set بازيابی و با استفاده از آن ، کنترل های سرويس دهنده موجود بر روی يک فرم وب را مقداردهی می نمايد .

VB.NET
Sub GetUserInfo ( ByVal UserID As String )
Dim dsUsers As Data.DataSet = GetUserData ( )
Dim rowUser As Data.DataRow = dsUsers.Tables("user").Rows.Find(UserID)
If rowUser Is Nothing Then Exit Sub
txtFirstName.Text = rowUser.Item("FirstName")
txtLastName.Text = rowUser.Item("LastName")
txtStreet.Text = rowUser.Item("Street")
txtCity.Text = rowUser.Item("City")
drpstate.Selected.Item.Text = rowUser.Item("State")
txtZip.Text = rowUser.Item("Zip")
End Sub





منبع: www.babrian.com