PDA

View Full Version : سوال: درخواست توصیح یک کد ورود



wordnet
پنج شنبه 27 بهمن 1390, 21:14 عصر
سلام

دوستان لطفا خط های زیر را در کد زیر برای بنده در صورت امکان توضیح دهید.
بسبار ممنون

1- خط 2
2-خط 9 تا 12
3-خط 23 و 24
4-خط 31



<?php
ob_start();
require_once 'class/config.php';
// Define $myusername and $mypassword
$myusername=$_POST['myusername'];
$mypassword=$_POST['mypassword'];

// To protect MySQL injection (more detail about MySQL injection)
$myusername = stripslashes($myusername);
$mypassword = stripslashes($mypassword);
$myusername = mysql_real_escape_string($myusername);
$mypassword = mysql_real_escape_string($mypassword);

$sql="SELECT * FROM user WHERE user='$myusername' and pass=md5('$mypassword')";
$result=mysql_query($sql);

// Mysql_num_row is counting table row
$count=mysql_num_rows($result);
// If result matched $myusername and $mypassword, table row must be 1 row

if($count==1){
// Register $myusername, $mypassword and redirect to file "login_success.php"
session_register("myusername");
session_register("mypassword");
header("location:login_success.php");
}
else {
echo "Wrong Username or Password";
}

ob_end_flush();
?>

MMSHFE
پنج شنبه 27 بهمن 1390, 22:33 عصر
1- در خط 2 تابع ob_start بافر خروجی رو فعال میکنه. این عمل برای جلوگیری از ارسال اطلاعات به کلاینت بکار میره و هر چیزی که echo کنیم، بجای رفتن به مرورگر کلاینت، توی بافر خروجی قرار میگیره. درنتیجه میتونیم با خیال راحت با توابع Session و Cookie و Header و کلاً توابعی که با هدر سروکار دارن، کار کنیم.
2- در خط 9 و 10 نام کاربری و رمز عبور با استفاده از stripslashes کارکترهای Escape یعنی \ از رشته های نام کاربری و رمز عبور حذف میشه. بعد در خط 11 و 12 با استفاده از تابع mysql_real_escape_string این رشته ها Escape میشن تا از وجود کدهای مخرب و ناامن توی اونها که برای SQL Injection بکار میرن، خیالمون راحت بشه.
3- در خط 23 و 24 دو متغیر Session به اسامی myusername و mypasword تعریف میشن. البته بهتره به جای این دستورات بدلیل منسوخ شدن تابع session_register از کد زیر استفاده کنید:


session_start();
$_SESSION['myusername'] = $myusername;
$_SESSION['mypassword'] = $mypassword;

همونطور که میبینید، در این روش، باید ابتدا session_start رو صدا بزنیم چون برخلاف تابع session_register، در استفاده مستقیم از آرایه SESSION_$ اینکار بطور خودکار انجام نمیشه.
4- خط 31 با فراخوانی تابع ob_end_flush باعث میشه محتویات بافر خروجی بطور یکجا برای مرورگر کلاینت (کاربر) ارسال و ضمناً بافر خروجی هم غیرفعال بشه.
موفق باشید.