PHP برای برنامه نویسان ASP.NET – قسمت سوم

خواندن قسمت اولقسمت دوم

کوکی ها در PHP

کوکی ها (Cookie) فایل های کوچکی هستند که اغلب برای شناسایی کاربران از آن ها در وب سایت ها استفاده می شود. هر بار که کاربر درخواستی به یک وب سایت می فرستد، فایل کوکی آن وب سایت نیز در صورت وجود فرستاده می شود. ASP.NET و PHP هر دو از کوکی ها به خوبی پشتیبانی می کنند اما مکانیزم کار کردن با آن ها کمی متفاوت است.

در PHP با استفاده از تابع setcookie می توان یک کوکی با مقادیر دلخواه بر روی کامپیوتر کاربر ایجاد کرد. این تابع دارای چندین پارامتر است که برخی از آن ها اختیاری است. لطفاً برای روشن تر شدن موضوع به مثال زیر توجه کنید :

<?php setcookie("myusername","imun22", time()+3600; ?>

در مثال بالا یک کوکی به نامmyusername ساخته می شود که مقدار imun22 را در خود ذخیره خواهد کرد. این کوکی یک ساعت بعد از بین خواهد رفت! برای اینکه PHP یک کوکی برای شما بسازد، باید آرگومان هایی را برای تابع setcookie مشخص کنید :

  • name : نام کوکی. شما بعداً برای دستیابی به اطلاعات این کوکی باید نامش را بدانید.
  • value : مقداری که کوکی باید در خود ذخیره کند. لطفاً اطلاعات حساس را در کوکی ذخیره نکنید!
  • expire : تاریخی که کوکی اعتبار خود را از دست خواهد داد و از کامپیوتر کاربر حذف خواهد شد.
  • path : مسیری بر روی سرور که این کوکی برای آن مسیر در دسترس خواهد بود. اگر این آرگومان را برابر ‹/› قرار دهید، کوکی در کل domain در دسترس خواهد بود. اگر به طور مثال برابر با ‹/sample/› قرار دهید، این کوکی فقط در دایرکتوری sample و زیر شاخه های آن قابل دسترس خواهد بود. اگر این آرگومان را ست نکنید، به طور پیش فرض کوکی فقط در دایرکتوری جاری قابل دسترس خواهد بود.
  • domain : دامینی که کوکی روی آن قابل دسترس خواهد بود. این آرگومان اختیاری است.
  • secure : یک مقدار بولین می گیرد و مشخص می کند که آیا کوکی باید بر روی یک ارتباط امن HTTPS انتقال یابد یا خیر. اگر برابر TRUE قرار گیرد، کوکی فقط زمانی ست خواهد شد که یک ارتباط امن وجود داشته باشد.
  • httponly : اگر برابر TRUE باشد، کوکی فقط بوسیله پروتکل HTTP قابل دسترس است. این بدین معنی است که زبان های اسکریپت نویسی مثل جاوا اسکریپت نمی توانند به کوکی دسترسی پیدا کنند.

اگر تابع setcookie با موفقیت یک کوکی را ایجاد کند، TRUE و در غیر این صورت FALSE برمی گرداند. به مثال زیر توجه کنید :

<?php
$TwoMonths = 60 * 60 * 24 * 60 + time();
setcookie('myuserinfo[username]', 'imun22', $TwoMonths);
setcookie('myuserinfo[lastvisit]', date("d/m/y"), $TwoMonths);
?>

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

HttpCookie cookie = new HttpCookie("myuserinfo");
cookie.Values["username"] = "imun22";
cookie.Values["lastvisit"] = DateTime.Now.ToShortDateString();
cookie.Expires = DateTime.Now.AddMonths(2);
Response.Cookies.Add(cookie);

البته این در صورتی است که فضای نام System.Net را using کرده باشید. همانطور که می بینید ASP.NET با کوکی ها به صورت یک کلاس برخورد می کند، در صورتی که در PHP این کار را یک تابع انجام می دهد.

دسترسی به مقادیر ذخیره شده در کوکی ها

ما در ASP.NET برای دسترسی به مقادیر ذخیره شده در یک کوکی از روش زیر استفاده می کنیم :

if (Request.Cookies["myuserinfo"]["username"] != null)
{
Response.Write(Request.Cookies["myuserinfo"]["lastvisit"]);
//do something else
}

در PHP هر کوکی که به کامپیوتر کلاینت فرستاده می شود به صورت خودکار در آرایه سراسری $_COOKIE قرار می گیرد. برای دسترسی به مقدار ذخیره شده در کوکی ها می توانید از این آرایه استفاده کنید.

<?php
if (isset($_COOKIE['myuserinfo'])) {
echo $_COOKIE['myuserinfo']['lastvisit'];
//do something else
}
?>

چطور یک کوکی را حذف کنیم؟

برای این کار شما باید تاریخ expire شدن کوکی را به زمان گذشته تنظیم کنید. این شبیه به همان کاری است که در ASP.NET هم انجام می دهیم. با این کار مروگر کاربر به صورت خودکار کوکی را حذف خواهد کرد.

<?php
setcookie("myuserinfo","", time()-3600);
?>

یک نکته مهم : تابع setcookie باید قبل از اینکه هر خروجی ای به مروگر ارسال شود، صدا زده شود. زیرا کوکی ها قسمتی از هدر HTTP هستند و باید قبل از اینکه خروجی صفحه وب به مروگر فرستاده شود، انتقال یابند.

مشترک فراسان شوید! چطور مشترک شوید؟

farasun.wordpress.com

این مطلب ادامه دارد…

پیاده سازی «من را بخاطر بسپار» در ASP.NET

اکثر وب سایت ها هنگام ورود کاربران یا همان Login کردن، برای راحتی کاربر قابلیتی دارند به نام «Remember me» یا «من را بخاطر بسپار» که با تیک زدن آن کاربر از آن به بعد می تواند بدون اینکه نام کاربری یا رمز عبور خود را وارد کند، از امکانات سایت استفاده کند. نمونه این قابلیت را حتماً هنگام وارد شدن در جی میل دیده اید. در این مطلب کوتاه آموزشی می خواهیم چنین قابلیتی برای یک وب سایت مبتنی بر ASP.NET پیاده سازی کنیم.
ابتدا باید بدانید که این قابلیت توسط کوکی ها پیاده سازی می شوند. Cookie یک فایل فایل متنی کوچک است که توسط مرورگر به درخواست یک صفحه وب ساخته می شود و برای استفاده های بعدی خوانده می شود. از آنجا که اطلاعات یک کوکی در هارد دیسک کاربر ذخیره می شوند، شما نباید اطلاعات حساس مانند رمزعبور کاربر را در آن نگهداری کنید. ASP.NET برای استفاده از کوکی ها کلاس هایی در نظر گرفته است. شما باید برای استفاده از کوکی ها ابتدا فضای نام System.Net را using کنید. در این مثال فرض می کنیم که شما با مباحث پایه ای ASP.NET آشنایی دارید.
صفحه لاگین خود را باز کنید و یک کنترل CheckBox به آن اضافه کنید و نام آن را به chkRemember تغییر دهید. در روال لاگین خود یعنی وقتی که کاربر درخواست ورود به سایت را می فرستد (مثلاً روی دکمه Login کلیک می کند) کدهای زیر را قرار دهید.

if (chkRemember.Checked)
{
HttpCookie cookie = new HttpCookie(«YourAppLogin»);
cookie.Values.Add(«username», txtUsername.Text);
cookie.Expires = DateTime.Now.AddDays(15);
Response.Cookies.Add(cookie);
}

کد بالا ابتدا چک می کند که آیا چک باکس توسط کاربر تیک خورده است یا خیر. اگر تیک خورده یعنی اینکه کاربر می خواهد وب سایت شما او را بخاطر بسپارد. سپس cookie را از کلاس HttpCookie نمونه سازی می کنیم و نام آن را YourAppLogin می گذاریم که در اینجا شما باید نام اپلیکیشن خود را به جای آن بگذارید (یا هر نام دلخواه دیگری) سپس Username کاربر را در این کوکی ذخیره می کنیم. txtUsername را به نام کامپوننتی که Username را از کاربر می گیرد تغییر دهید. در اینجا شما می توانید مقادیر دیگری را به همین شکل به کوکی اضافه کنید، به طور مثال ID کاربر را نیز برای هدف خاصی ذخیره کنید. در خط بعدی با Expires به مرورگر می گوئیم که پس از 15 روز این کوکی را به صورت خودکار حذف کند. این زمان را می توانید با تغییر عدد 15 عوض کنید. در خط آخر نیز باید این کوکی را به مجموعه کوکی های مرورگر اضافه کنیم.

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

if (Request.Cookies[«YourApLogin»] != null)
{
string username = Request.Cookies[«YourAppLogin»].Values[«username»]);
}

استفاده از کدهای بالا در صورتی است که شما Login را به صورت دستی کدنویسی کرده باشید. کسانی که از روش Forms Authentication و قابلیت Membership در ASP.NET استفاده می کنند به راحتی با یک خط کد زیر می توانند از این  قابلیت استفاده کنند :

FormsAuthentication.SetAuthCookie(txtUsername.Text, chkRemember.Checked);

farasun.wordpress.com

پ.ن : این مطلب هم تقدیم می شود به همکلاسی های عزیز!