آموزش ساخت سيستم كاربري
اين مطلب رو در راستاي آموزش ساخت سيستم وبلاگ دهي مي نويسم و بعلاوه گفتم تو يك آموزش جدا باشه تا اگه كسي فقط دنبال همين بود هم راحت بهش برسه
خيلي خلاصه مي گم
كاربر وارد سايت ميشه
بررسي مي كنيم آيا قبلا كاربر وارد سايت شده يا نه
اگر وارد شده بود يعني 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
در خط سوم گفتم اگر در آرايه $_SESSION ايندكسي به اسم username كه يك اسم دلخواه و انتخابي توسط خودم هست؛وجود داشت يعني كاربر وارد شده و در غير اينصوت به كاربر اطلاعات ورود/عضويت رو نشون بده
حالا يك فرم html ساده مي سازم
login.html
فرو html رو توضيح نمي دم
فقط در خط اول به action دقت كنيد
و method كه post هست و نه get
نام كاربري و پسورد هم كه در فرم با نام هاي username و password مشخص شده اند
فايل login.php
در خط 3 بررسي كردم كه اين دو مقدار توسط فرم ارسال شده باشند
بعد در خط 4 به بعد بررسي كردم اگه نام كاربر و پسورد دررست بود سشن يوزر نيم ايجاد بشه و كاربر به صفحه اصلي بازگشت داده بشه در غير اينصورت خطا بگيره
چون خواستم ساده باشه براي يوزر نيم و پسورد فعلا از ديتابيس استفاده نكردم و ساده ترين حال ممكن رو پيش بردم!
تا اينجا ما در فايل اصلي چك كرديم كاربر وارد شده يا نه
در فايل login.html
فرم ورود رو داشتيم
و در فايل login.php اعتبار سنجي و تاييد هويت رو داشتيم
در مرحله آخر اين آموزش هم logout رو بررسي مي كنيم
براي logout كافيه سشن يوزر نيم رو حذف كنيم
در اينجا تمام سشن هاي كاربر رو مي تونيم با تابع
session_destroy();
نابود كنيم!
پس logout.php
با تشکر فراوان ،
خیلی وقت بود دنبال همچین چیزی می گشتم ، فقط ای کاش میشد ، یک سیستم خودتون مینوشتید و قرار میدادید ، یک سیستم ساده که یوزرنیم و پسوورد بخواد و وقتی درست بود وارد بشه و نبود همونجوری بمونه . اینجوری ما دانلود میکردیم و تک تک کد ها رو آنالیز میکردیم بیشتر میتونستیم روش تمرکز بگیریم .
من این رو ساختم تست هم کردم چیز جالبی هست اما دیتابیس یه چیز دیگس
خیلی خیلی خیلی ممنون ، زحمت کشیدید .
فقط یک سوال : چه جوری میشه داخل این کد تعداد زیادی یوزرنیم و پسوورد ذخیره کرد ؟
یک سوال دیگه : خوب اینجوری ، اگر کسی فایل Login.php رو از روی هاست برداره تمام یوزنیم و پسوورد ها رو میتونه مشاهده کنه که ! راهی نداره کاری کرد کسی نتونه اون فایل رو ببینه و نشه اون رو از رو هاست دانلود کرد ؟
با تشکر فراوان
---------- Post added at 03:29 PM ---------- Previous post was at 03:23 PM ----------
انشالله در ادامه مبحث عضو گيري رو هم ميگم و و استفاده از كدها رو با ديتابيس پيش م بريم تا كمي به واقعيت نزديك تر بشيم
منظورم از اينكه به واقعيت نزديك بشيم همين ها بود كه گفتيد!
فقط مفاهيم اوليه رو توضيح دادم ، ان شالله فرصت كنم تو يك جلسه با ديتابيس ادامه ميدم و يكي هم براي تامين امنيتش
---------- Post added at 03:36 PM ---------- Previous post was at 03:35 PM ----------
فقط یک سوال : چه جوری میشه داخل این کد تعداد زیادی یوزرنیم و پسوورد ذخیره کرد ؟
تو شرطي كه نوشتم ميشه دستي اضافه كرد،ولي اينو گذاشتم باري register.php كه با ديتابيس توضيحش مي دم
منظورم از اينكه به واقعيت نزديك بشيم همين ها بود كه گفتيد!
فقط مفاهيم اوليه رو توضيح دادم ، ان شالله فرصت كنم تو يك جلسه با ديتابيس ادامه ميدم و يكي هم براي تامين امنيتش
---------- Post added at 03:36 PM ---------- Previous post was at 03:35 PM ----------
تو شرطي كه نوشتم ميشه دستي اضافه كرد،ولي اينو گذاشتم باري register.php كه با ديتابيس توضيحش مي دم