مهمترين رسالت برنامه هاي کامپيوتري ارتباط با کاربران و پاسخگوئي به نياز آنان با توجه به پتانسيل هاي پيش بيني شده در برنامه مي باشد. شناسائي کاربران توسط برنامه هاي کامپيوتري مي تواند زمينه ارائه سرويس ها و خدمات بهينه تري را فراهم نمايد( ارائه سرويس ها و خدمات مشخص شده به گروهي خاص از کاربران ) . برنامه هاي وب نيز از اين قاعده مستثني نبوده و با توجه به ماهيت Stateless بودن پروتکل ارتباطي بين سرويس گيرنده و سرويس دهنده ( ارسال درخواست ، پاسخ به درخواست ، عدم بخاطر سپردن اطلاعاتي در ارتباط با در خواست ارسالي و پاسخ دريافتي ) ، مي بايست تمهيدات خاصي بمنظور شناسائي کاربران اتخاذ گردد. برخي از برنامه هاي وب ، کاربران را ملزم مي نمايند که در ابتدا يک فرم را تکميل و اصطلاحا" ريجستر گردند . در چنين برنامه هائي ، در صورتيکه کاربر مجددا" از برنامه وب استفاده نمايد ( ملاقات مجدد وب سايت مربوطه ) ، امکان شناسائي کاربر با بهره گيري از راهکارهاي متفاوتي وجود خواهد داشت ( شناسائي کاربر بر اساس بازيابي اطلاعات ثبت شده ) . وب سايتي را در نظر بگيريد که از طريق آن محصولاتي عرضه و توسط کاربران خريداري مي گردد . در زمان خريد کالا توسط کاربران ، سايت موردنظر مي تواند اقدام به دريافت اطلاعات خريدار و ثبت آنان بر اساس مکانيزمهاي متفاوت نمايد . در صورتيکه کاربر فوق ، مجددا" از اين سايت کالائي را خريداري نمايد ، مي توان اطلاعات مربوط به وي را (اطلاعات شناسنامه اي ، آدرس و ... ) بصورت اتوماتيک در فرم سفارش جديد، درج نمود .
شناسائي کاربران برنامه هاب وب
يکي از روش هائي که برنامه هاي وب را قادر به شناسائي کاربران مي نمايد، الزام کاربران به درج نام و رمز عبور بمنظور استفاده از برنامه مي باشد. برنامه هاي وب ، همچنين قادر به شناسائي کاربران از طريق اطلاعات ذخيره شده بر روي کامپيوتر کاربران و به شکل "کوکي " مي باشند. کوکي ، فايل کوچکي بوده که يک برنامه وب قادر به نوشتن آن بر روي کامپيوتر سرويس گيرنده است .
از مهمترين مزاياي کوکي ، مي توان به تعامل نامحسوس با کاربر اشاره نمود. در چنين مواردي ، کاربران هر مرتبه که سايت را ملاقات مي نمايند ، الزامي به 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 |