آموزش ساخت سيستم كاربري
اين مطلب رو در راستاي آموزش ساخت سيستم وبلاگ دهي مي نويسم و بعلاوه گفتم تو يك آموزش جدا باشه تا اگه كسي فقط دنبال همين بود هم راحت بهش برسه
خيلي خلاصه مي گم
كاربر وارد سايت ميشه
بررسي مي كنيم آيا قبلا كاربر وارد سايت شده يا نه
اگر وارد شده بود يعني login كرده بود كه مشخصات مربوط به خودش رو.نشونش مي ديم و گرنه فرم ثبت نام
آموزش رو خيلي ساده و بدور از رعايت هر گونه نكات امنيتي بيان مي كنم
انشالله فرصت كنم يك تاپيك امنيت هم تو انجمن ميذارم
تعاريف رو از زبان خودم ميگم بنابراين ممكنه دقيقا برابر تعارف كتابي نباشه!
سشن در لغت يعني جلسه. وقتي ما به يك سايت مي ريم مرورگر تمام كوكي هاي ذخيره شده در اون سايت رو به برنامه تحت وب ارسال مي كنه
همين الان اگر به تنظيمات مرورگر بريد و كوكي هاي مرتبط با انجمن رو ببينيد ، مي بينيد كه يك كوكي به نام session id
داريم.البته ممكنه در برنامه نام اين كوكي رو عوض كرده باشيم پس لزوما به همين نام نيست
در واقع وقتي كه ما وارد يك سايت مي شيم ، اگر در برنامه تحت وب از سشن ها استفاده شده باشه يك جلسه جديد براي ما ايجاد ميشه و عموما در يك فولدر tmp كه در php.ini مشخص شده يك فايل براي هر كاربر ايجاد ميشه كه ما توسط شناسه سشن يا همون session id مي تونيم به اون سشن دسترسي داشته باشيم
اما فرق كوكي با سشن چيه؟
در كوكي ها تمام اطلاعات در كامپيوتر كاربر ذخيره ميشه و به راحتي قابل رويت هست و به همين خاطر اعتبار سنجي كاربر توسط كوكي ها تقريبا امري اشتباه هست
يكي از دلايلي كه وقتي وارد سايتي ميشيم و ازمون مي پرسه براي چه مدت لاگين نگه دارمتون همينه كه چون ميشه كوكي ها رو به صورت fake ايجاد كرد و دسترسي غير مجاز ايجاد كرد
البته طبيعتا اين مربوط به امنيت و ضعف در كد نويسي هست كه بحث ما نيست!
در سشن ها فقط يك شناسه كد شده در قالب يك كوكي در سمت مرورگر كاربر ذخيره ميشه و بقيه اطلاعات به صورت index در همون فايلي كه در پوشه tmp براي كاربر ايجاد شده ذخيره ميشوند
البته حتي اگر در سشن ها هم موارد امنيتي رو رعايت نكنيم با جعل شناسه جلسه ميشه امنيت سايت رو تهديد كرد ولي بررسي موارد امنيتي رو به تاپيك امنيت مي سپارم و روش هاي مقابل با اين تهديد هاي امنيتي رو در اونجا بررسي مي كنم و آموزش رو از اين كه هست پيچيده تر نمي كنم
حالا كه با مفاهيم سشن و كوكي از زبان من(!) آشنا شديد بريم سمت كد نويسي
تابع session_start
sesison_start از جمله توابعي هست كه بايد قبل از هر خروجي ايي در برنامه استفاده بشه
يعني اگر قبل از اين تابع در برنامه خروجي داشته باشيم ، تابع خطا ميده و درست اجرا نميشه
دستورات و توابع header از اين قبيل هستند.
با اينكه بحث ما نيست اما اين رو هم بد نيست كه بگم يكي از دلايل توصيه به استفاده از اديتور هاي استاندارد پي اچ پي همين هست كه اديتور هايي مثل notepad ويندوز قبل از كد php به خصوص در حال utf
معمولا يك كاراكتر اضافي و غير قابل رويت در همون اديتور ايجاد مي كنند كه وقتي برنامه رو اجزا مي كنيم و خطاهايي مانند
header already sent at line...
يا اين قبلي مواجه ميشيم
پس درست بعد از تگ php اينجوري برنامه رو آغاز مي كنيم
کد PHP:
<?php
session_start();
//ادامه
?>
حالا كه اين تابع رو زديم پي اچ پي مي گرده ببينه آيا اين كاربر براش سشن آي دي تعريف شده؟اگه شده آيا معتبر هست يا نه.
اگر درست بود كه اطلاعات فايل ذخيره شده در پوشه tmp مطابق با اين شناسه در قالب يك آرايه پيش فرض به نام $_SESSION در برنامه قابل استفاده خواهند بود.
و در غير اين صورت يك شناسه معتبر به كاربر تعلق مي گيره و يك جلسه جديد براي كاربر ايجاد ميشه
تابع isset
اين تابع ربطي به سشن ها نداره! با اين تابع مي تونيم بفهمين آيا يك متغير تعريف شده يا نه
برنامه زير رو ببنيد:
index.php
کد PHP:
<?php
session_start();
if(isset($_SESSION['username']))
echo "welcome, ".$_SESSION['username'];
else
echo "Please Login/register";
?>
در خط سوم گفتم اگر در آرايه $_SESSION ايندكسي به اسم username كه يك اسم دلخواه و انتخابي توسط خودم هست؛وجود داشت يعني كاربر وارد شده و در غير اينصوت به كاربر اطلاعات ورود/عضويت رو نشون بده
حالا يك فرم html ساده مي سازم
login.html
کد HTML:
<form action="login.php" method=post>
<input name=username value="" size="20">
<input name=password value="" size="20" type="password">
<input type=submit name=submit value="Login">
</from>
فرو html رو توضيح نمي دم
فقط در خط اول به action دقت كنيد
و method كه post هست و نه get
نام كاربري و پسورد هم كه در فرم با نام هاي username و password مشخص شده اند
فايل login.php
کد PHP:
<?php
session_start();
if(isset($_POST['username']) && isset($_POST['password']))
if($_POST['username'] == 'reza' && $_POST['password'] == 'test')
{
$_SESSION['username'] = 'reza';
HEADER('LOCATION: index.php');
}
else
die('wrong username/password!');
?>
در خط 3 بررسي كردم كه اين دو مقدار توسط فرم ارسال شده باشند
بعد در خط 4 به بعد بررسي كردم اگه نام كاربر و پسورد دررست بود سشن يوزر نيم ايجاد بشه و كاربر به صفحه اصلي بازگشت داده بشه در غير اينصورت خطا بگيره
چون خواستم ساده باشه براي يوزر نيم و پسورد فعلا از ديتابيس استفاده نكردم و ساده ترين حال ممكن رو پيش بردم!
تا اينجا ما در فايل اصلي چك كرديم كاربر وارد شده يا نه
در فايل login.html
فرم ورود رو داشتيم
و در فايل login.php اعتبار سنجي و تاييد هويت رو داشتيم
در مرحله آخر اين آموزش هم logout رو بررسي مي كنيم
براي logout كافيه سشن يوزر نيم رو حذف كنيم
در اينجا تمام سشن هاي كاربر رو مي تونيم با تابع
session_destroy();
نابود كنيم!
پس logout.php
کد PHP:
<?php
session_destroy();
HEADER('LOCATION: index.php');
?>
انشالله در ادامه مبحث عضو گيري رو هم ميگم و و استفاده از كدها رو با ديتابيس پيش م بريم تا كمي به واقعيت نزديك تر بشيم