کاربرد کوکی در php

دوستان میخوام مفهوم و کاربرد کوکی رو برای همیشه یاد بگیرید و خودتون رو  دیگه درگیر این بحث و یادگیریش نکنید.

من با یک مثال شروع میکنم

ما وقتی یک فرم ورودی رو در سایتمون قرار میدیم ، معمولا یک چک باکس هم در اون زیر قرار میدیم که نوشته "مرا به خاطر بسپار"  که یکی از کاربردهای کوکی هست .

روال کار در دنیا به اینصورت هست که وقتی کاربر برای وارد شدن به سایت به صفحه لاگین مراجعه میکنه ، نام کاربری و رمز عبور رو وارد کرده و و دکمه ورود رو کلیک میکنه که سیستم اطلاعات وارد شده رو با دیتابیس چک میکنه و اگه کاربری با چنین مشخصات وجود داشت  دو تا سشن ایجاد میکنیم و مثلا نام کاربری و رمز عبور کاربر رو درون این متغییر ذخیره میکنیم و کاربر وارد سایت میشه که حتما میدونید بعد از بسته شدن پنجره مرورگر اون متغیرها (یعنی سشن ها) حذف میشه و کاربر باید مجدد وارد سایت بشه و عمل لاگین انجام بده ولی میتونیم این کار رو با استفاده از کوکی ها در برنامه نویسی مدیریت کنیم طوری که مثلا حتی با بسته شدن مرورگر هم تا یک مدت زمان خاصی لاگین بودن کاربر رو حفظ کنیم.

برای اینکار ما زمانیکه کاربر لاگین کرد و یک سشن ایجاد کردیم ، در همونجا یک کوکی هم ست می کنیم یعنی ایجاد میکنیم .

کوکی هم دقیقا مثل سشن یک متغییری هست که اطلاعات رو برای ما نگهداری میکنه ، با این تفاوت که بر روی مرورگر کاربر ذخیره میشه

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

پس اگر ما اطلاعات لاگین کاربر رو درون کوکی بر روی مرورگرش نگهداری کنیم وقتی با همون مرورگر به سایت مراجعه میکنه ، چک میکنیم ببینیم اصلا سشنی برای این کاربر هست یا نه ، اگر نیست ، چک میکنیم ببینیم آیا کوکی هم براش ست نشده که اگه کوکی ست شده بود دوباره اطلاعات درون کوکی رو با دیتابیس مجددا چک میکنیم که ببینیم کاربر وجود داره یا نه و اطلاعات کوکی درسته که در صورت درست بودن کاربر رو وارد شده تلقی میکنیم.

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

نکته بسار مهم :

اینجا یک نکته فراموش نشه که حتما کوکی ها رو در صورت وجود مجددا از لحاظ مقدار در سمت سرور بررسی کنید و فقط این رو چک نکنید که آیا کوکی با فلان نام ست شده یا نه ، بلکه اول وجود داشتن کوکی رو چک کنید بعد مقادیر داخل کوکی که مرورگر ارسال کرده رو باز با اطلاعات دیتابیس مطابقت بدید چون کاربران میتونن کوکی ها رو بر روی مرورگرشون ایجاد بکنند بدون اینکه ما در هنگام  ورودشان ایجاد کنیم پس اگر شما فقط وجود یا نبود کوکی رو چک کنید و مقادیرش رو چک نکنید ممکنه کاربر خودش در مرورگرش یک کوکی تعریف بکنه و وقتی وارد سایت میشه سایت ببینه یک کوکی ثبت شده و کاربر رو به حساب دیگران هدایت کنه

دستور ایجاد کوکی در php بصورت زیر هست :

<?php setcookie("username","123456",time() + 60 * 60) ?>

البته بزارید یک چیزی هم بگم ، مثلا اگه شما دکمه خروج هم در سایت داشتید  و خواستید که وقتی کاربر  روش کلیک کرد از سایت خارج بشه حواستون باشه که هم سشن رو و هم کوکی رو پاک کنید.

پاک کردن کوکی دستور خاص دیگه ای نداره و تنها کافیه شما بجای + از - استفاده کنید ، بصورت زیر :

<?php setcookie("username","123456",time() - 60 * 60) ?>

اینم بگم که اگه دقت کنید ما در پارامتر سوم تابع setcookie زمان انقضا رو مشخص کردیم که در اینجا با تابع time زمان فعلی رو بدست آوردیم و با یک مقداری جمع کردیم که من در این مثال 60 دقیقه در نظر گرفتیم به اینصورت که گفتیم زمان فعلی به علاوه 60 ثانیه و اون هم ضربدر 60 که میشه یک ساعت

نکته بسار مهم دیگر درباره کوکی ها در برنامه نویسی :

زمانیکه میخواهید رمز عبور کاربر رو درون کوکی قرار بدید حتما هش کنید تا رمز عبور قابل نمایش بر روی مرورگر کاربر نباشه که این از لحاظ امنیتی ضرورت داره که یا مثلا شخص دیگه ای اگه بره مرورگر کاربر رو توی کامپیوترش باز کنه و لیست کوکی هاشو ببینه میتونه براحتی به رمزش پی ببره

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

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

امیدوارم مفید بوده باشه و اگه سئوالی داشتید حتما مطرح کنید 

مشتاقانه پاسخ خواهم داد

اگر از طریق موتورهای جستجو به این صفحه هدایت شدید ، پیشنهاد میکنم مطالب و پست های دیگه وبلاگ منو هم ببینید ، فکر میکنم پشیمان نخواهید شد

موفق و پیروز باشید

ارادتمند شما مهدی حسامی - توسعه دهنده وب و تحلیلگر سیستم