امتیاز موضوع:
  • 0 رأی - میانگین امتیازات: 0
  • 1
  • 2
  • 3
  • 4
  • 5
ساخت صفحه ورود اطلاعات با PHP
نویسنده پیام
ΛΛ Θ l-l $ Σ Ω آفلاین
کاربر با تجربه
****

ارسال‌ها: 739
موضوع‌ها: 147
تاریخ عضویت: مهر ۱۳۸۶

تشکرها : 219
( 187 تشکر در 98 ارسال )
ارسال: #1
ساخت صفحه ورود اطلاعات با PHP
روش ساختن صفحه ورود اطلاعات با PHP رو ميشه به من بگيد.
مثلا نام ، نام خانوادگي ، ايميل ، رو بگيره و يه جا ذخيره كنه.

Exclamation
۰۷-آبان-۱۳۸۶, ۱۳:۰۵:۲۳
ارسال‌ها
پاسخ
black-scorpion آفلاین
تازه وارد

ارسال‌ها: 16
موضوع‌ها: 5
تاریخ عضویت: خرداد ۱۳۸۶

تشکرها : 0
( 2 تشکر در 1 ارسال )
ارسال: #2
RE: ساخت صفحه ورود اطلاعات با PHP
سرفصل‌ها :
1ـ اين اسكريپت چگونه كار مي كند | پيشنيازها | الگوي بانك اطلاعاتي
2ـ اتصال به بانك اطلاعاتي |‌ متغيرهاي جلسات
3ـ هسته اسكريپت | ورود كاربران
4ـ كنترل مداوم اعتبار ورود | اطمينان از معتبر بودن اطلاعات جلسات

اين آموزش در سطح متوسط طراحي گرديده و به شما خواهد آموخت كه چگونه يك برنامه لاگين امن و حرفه اي طراحي كنيد . بزودي ياد مي گيريم كه چگونه با استفاده از توابع كوكي ها دسترسي به جلسات را قانوني كنيم و از سرقت جلسات جلوگيري كنيم.

1ـ اين اسكريپت چگونه كار مي كند ؟
در اين قسمت مي خواهم برايتان دليل انتخاب اين متد براي لاگين امن را برايتان توضيح دهم فراموش نكنيد كه اصولا امنيت قانون ندارد و شما نيز با استفاده از تجربيات و توانايي هاي هوشي خود بايد به فكر توسعه و طراحي موارد مشابه و امن تر نمائيد و به هيچ وجه به اين حد بسنده نكنيد:
/tmpكاربراني كه قادرند تا به سرور دست يابي داشته باشند مي تواند جلسات معتبر لاگينها را از شاخه پيش فرض
كه به منظور ذخيره سازي اطلاعات جلسات استفاده ميشود مشاهده نمايند روش جلوگيري از اين نوع حمله كنترل آي پي مي باشد.
كساني كه بر روي ميزبان شما سايتي دارند قادرند جلسات معتبر براي سايت شما توليد كنند توجه بفرمائيد كه برخي سايتها سرورهاي اختصاصي دارند كه به لحاظ امنيتي بسيار مطلوبترند مثل سايت پرشين بلاگ
برخي از اون آدمايي كه به قول خودمون آخرشن و اند حكن مي تونن شبكه رو بو بكشن و كوكي‌ها رو بقاپن
كنترل آي پي اين مشكل رو هم حل مي كنه

2-1ـ اما پيش نيازها
شما اول از همه بايد بدونين كه چه اطلاعاتي از كاربران قرار كه در سايت ذخيره بشه در اين مثال براي سهولت آموزش ساده ترين شكل ممكن رو فرض قرار دادم ضمنن چون الان همه ديگه پي اچ پي 4.1 به بالا دارن من هم از استفاده كردم اگر مي خواين كه اين اسكريپت رو روي نسخه هاي قديمي تر اجرا كنين شما super global arrays
مجبوريد كه از
$GLOBALS['HTTP_SESSION_VARS']
استفاده كنيد.

الگوي بانك اطلاعاتي ـ1-3
اين فقط يك مثال ساده با ساختاري مناسب براي مديريت اگر كه مايليد اين مثال را براي كاربران ثبت نام شده استفاده كنيد مي توانيد ستونهاي را به دلخواه اضافه كنيد
من الگوي بانك اطلاعاتي را كه از ماي اس كيو ال استفاده مي كنه اينجا گذاشتم شما مي تونين از ديگر بانكهاي اطلاعاتي نيز استفاده كنيد:


کد PHP:
CREATE TABLE member (
id int NOT NULL auto_increment,
username varchar(20) NOT NULL default '',
password char(32) binary NOT NULL default '',
cookie char(32) binary NOT NULL default '',
session char(32) binary NOT NULL default '',
ip varchar(15) binary NOT NULL default '',
PRIMARY KEY (id),
UNIQUE KEY username (username)
);




فيلدهاي پسورد و كوكي براي استفاده از ام دي فايو طراحي شدن كوكي مقدارش براي زمانيست كه كاربر بخواهد اطلاعات برايش ذخيره شود و فيلدهاي جلسه و آي پي براي جلسه آي دي و آي پي كاربر استفاده مي شوند.

ــــــــــــــــــــــــــــــــــــــ
2ـ اتصال به بانك اطلاعاتي



کد PHP:
function &db_connect() {

require_once 'DB.php';

PEAR::setErrorHandling(PEAR_ERROR_DIE);

$db_host = 'localhost';
$db_user = 'root';
$db_pass = '';
$db_name = 'shaggy';

$dsn = "mysql://$db_user:$db_pass@unix+$db_host/$db_name\";

$db = DB::connect($dsn);

$db->setFetchMode(DB_FETCHMODE_OBJECT);
return $db;

}

اين تابع شما را به بانك اطلاعاتي متصل مي كند و يك اشاره گر به شي بانك اطلاعاتي پير باز مي گرداند

2-2ـ متغيرهاي جلسات:
براي سهولت در امر دستيابي به اطلاعات كاربران من اون رو يك متغير جلسه ثبت مي كنم ولي براي جلوگيري از پيغام خطا و همچنين ست كردن برخي پيش فرض ها از تابع زير استفاده مي كنم:



کد PHP:
function session_defaults() {

$_SESSION['logged'] = false;
$_SESSION['uid'] = 0;
$_SESSION['username'] = '';
$_SESSION['cookie'] = 0;
$_SESSION['remember'] = false;
}

براي ست كردن يه مقادير پيش فرض از تابع بالا و براي چك كردن از تابع زير

کد PHP:
if (!isset($_SESSION['uid']) ) {
session_defaults();
}

رو فرا خواني كنيمsession_startالبته فراموش نمي كنيم كه قبل از اينها بايد تابع

3ـ هسته اسكريپت:
براي ايجاد يكپارچگي ساده تر با ديگر اسكريپتها و ساخت مدوله شده تر هسته اسكريپت رو يك آبجكت با ظاهري خيلي ساده مي سازم


کد PHP:
class User {

var $db = null; // PEAR:BiggrinB pointer
var $failed = false; // failed login attempt
var $date; // current date GMT
var $id = 0; // the current user's id

function User(&$db) {

$this->db = $db;
$this->date = $GLOBALS['date'];

if ($_SESSION['logged']) {
$this->_checkSession();
} elseif ( isset($_COOKIE['mtwebLogin']) ) {
$this->_checkRemembered($_COOKIE['mtwebLogin']);

}

}



اين كلاس كه تعريف ميشه آبجكت ما رو ميسازه البته اين كاملا مدوله شده نيست اما يك تاريخ مشكل بزرگي نيست و شما مي تونين اونو با اسكريپتهايي كه بقيه دوستان نوشتن به صورت شمسي توليد كنيد در اينجا ما چنين چيزي رو مي سازيم:

کد PHP:
$date = gmdate("'Y-m-d'\");
$db = db_connect();
$user = new User($db);


حالا براي روشن شدن هدف كد يعني لاگين كردن تلاش مي كنيم ما ابتدا كنترل مي كنيم كه آيا كاربر لاگين كرده يا نه اگر اين كار رو كرده بود ما جلسات رو چك مي كنيم(فراموش نكنين كه اين يك كد امنيتي) وگرنه يك كوكي رو نام گذاري مي كنيم براي كنترل كردن اين به ما اجازه مي ده كه بينندگان سايت رو شناسايي كنيم

3-1ـ لاگين كردن كاربران:

براي اجازه دادن به كاربران براي لاگين كردن شما بايد يك فرم وب بسازيد پس از اعتبار سنجي فرم شما مي تونيد اعتبار كاربر رو براي تائيد اطلاعات وارد شده كنترل كنيد كه براي اينكار از
$user->_checkLogin('username', 'password', remember)
استفاده مي كنيم
خاطر نشان مي كنيم كه يوزر نيم و پسورد البته نبايد ثابت باشند و ريممبر يك مقدار بولين است كه به كاربر اجازه مي دهد تا با درست قرار دادن مقدار آن لاگين خودكار را فعال بسازد



کد PHP:
function _checkLogin($username, $password, $remember) {

$username = $this->db->quote($username);
$password = $this->db->quote(md5($password));

$sql = "SELECT * FROM member WHERE \" .
\"username = $username AND \" .
\"password = $password\";

$result = $this->db->getRow($sql);

if ( is_object($result) ) {
$this->_setSession($result, $remember);
return true;
} else {
$this->failed = true;
$this->_logout();
return false;
}

}

تعريف تابع بايد در مكاني كنار كلاس تعريف شده يوزر باشه مانند تمام كدهاي پائين در تابع از متدPEAR:BiggrinB's quote استفاده كردم تا اطلاعات با امنيت كامل به بانك اطلاعاتي انتقال پيدا كنند و به صورت بي ختري نيز از آن رهاي يابند و باز گردنند من از تابع ام دي فايو ترجيحا به جاي توابع ماي اسكيو ال استفاده كردم تا شما اگر مايل بوديد بتوانيد از بانكهاي اطلاعاتي ديگر نيز استفاده كنيد.
حلقه ور بهينه شده زيراكه يوزرنيم به صورت منفرد تعريف شده است نيازي به كنترل خطاهاي بانك اطلاعاتي نيست زيراكه خطاهاي پيشفرض قبلا در بالا ست شدند چنانچه آبجكت با رزالت بانك اطلاعاتي متچ شود لذا متغير جلسات ست مي شوند و مقدار ترو باز ميگردد وگرنه مقدار فلد با ترو برابر مي گردد شما مي تونين اينجا يك دستور كنترلي قرار دهيد تا پيغام سقوط عمليات لاگين رو اعلام كنه و براي انجام لاگ اوت براي اين بيننده كافيست تا session_defaults() را اجرا كنيم

3-3ـ وضع كردن جلسه:


کد PHP:
function _setSession(&$values, $remember, $init = true) {

$this->id = $values->id;
$_SESSION['uid'] = $this->id;
$_SESSION['username'] = htmlspecialchars($values->username);
$_SESSION['cookie'] = $values->cookie;
$_SESSION['logged'] = true;

if ($remember) {

$this->updateCookie($values->cookie, true);

}

if ($init) {

$session = $this->db->quote(session_id());
$ip = $this->db->quote($_SERVER['REMOTE_ADDR']);

$sql = "UPDATE member SET session = $session, ip = $ip WHERE \" .
\"id = $this->id\";
$this->db->query($sql);

}

}

اين متد متغير جلسه را ست مي كند و همچنين اگر در خواست كوكي براي داشتن لاگين مسمتر (خودكار) ارسال شده باشد
همچنين اين متد يك پارامتر دارد كه معين مي كند كه اين بار اول لاگين كردن است يا نه (از طريق فرم يا كوكي)
يا كنترل جلسه براي اولين بار نيست.

4ـ لاگين خود كار:
اگر بينندگان در خواست كنند كه كوكي ارسال بشه تا دفعات بعدي از لاگين كردن در هر مشاهده از سايت بپريد
اين دو متد به شما براي رسيدن به اين مهم كمك خواهد كرد



کد PHP:
function updateCookie($cookie, $save) {

$_SESSION['cookie'] = $cookie;
if ($save) {

$cookie = serialize(array($_SESSION['username'], $cookie) );
set_cookie('mtwebLogin', $cookie, time() + 31104000, '/directory/');
}

}



4-1ـ كنترل لاگين خود كار:
اگر كاربران لاگين خودكار را انتاخاب كرده باشند كه به اسكريپت اجازه ذخيره كوكي را مي دهد كه كنترل مي شه از طريق متد زير





کد PHP:
function _checkRemembered($cookie) {

list($username, $cookie) = @unserialize($cookie);
if (!$username or !$cookie) return;

$username = $this->db->quote($username);
$cookie = $this->db->quote($cookie);

$sql = "SELECT * FROM member WHERE \" .
\"(username = $username) AND (cookie = $cookie)\";

$result = $this->db->getRow($sql);

if (is_object($result) ) {
$this->_setSession($result, true);
}

}




اين تابع هرگز نبايد توسط پيغام خطايي متوقف شود براي ساختن چيزهاي امن تر با كوكي ها مقدار كوكي در كوكي ذخير مي شود نه پسورد كاربر يكي از اين راه ها مي تونه درخواست يك لغت عبور باشه براي ناحيه اي كه به امنيت بيشتري نياز دارد

5-5ـ مطمئن شدن از اعتبار جلسه:



کد PHP:
function _checkSession() {

$username = $this->db->quote($_SESSION['username']);
$cookie = $this->db->quote($_SESSION['cookie']);
$session = $this->db->quote(session_id());
$ip = $this->db->quote($_SERVER['REMOTE_ADDR']);

$sql = "SELECT * FROM member WHERE \" .
\"(username = $username) AND (cookie = $cookie) AND \" .
\"(session = $session) AND (ip = $ip)\";

$result = $this->db->getRow($sql);

if (is_object($result) ) {
$this->_setSession($result, false, false);
} else {
$this->_logout();
}

}


پوف بالاخره آخرين قسمت كار ما كنترل مي كنيم كه آيا كوكي ذخيره شده در جلسه درست هست يا نه جلسه آي دي و آي پي كاربر
با يك پارامتر كه اجازه مي ده كه بفهميم كه اين اولين بار لاگين كردن در سيستم هست بنابراين setSessionفراخواني
مقدار آي پي و آي دي در جلسه بروز رساني نشود كه در بقيه موارد بطور معمول انجام مي شود.



منبع: NsD_ir
۲۴-آبان-۱۳۸۶, ۱۴:۱۰:۲۵
ارسال‌ها
پاسخ
تشکر شده توسط : relax_cp, ha_60
jaber آفلاین
در حال پیشرفت
***

ارسال‌ها: 330
موضوع‌ها: 65
تاریخ عضویت: دى ۱۳۸۴

تشکرها : 61
( 66 تشکر در 41 ارسال )
ارسال: #3
RE: ساخت صفحه ورود اطلاعات با PHP
کد ها یک خورده نام مرطب هست می شه سورسش رو داخلی zip بزنی و اینجا اتچ کنی دوست گرامی ؟

نماز بخوانید قبل از اینکه نماز بر شما خوانده شود
۰۱-آذر-۱۳۸۶, ۱۵:۲۷:۴۰
ارسال‌ها
پاسخ
NabiKAZ آفلاین
مدیر بازنشسته
*****

ارسال‌ها: 520
موضوع‌ها: 48
تاریخ عضویت: اسفند ۱۳۸۲

تشکرها : 6
( 60 تشکر در 46 ارسال )
ارسال: #4
RE: ساخت صفحه ورود اطلاعات با PHP
سلام ،

آموزش خوبی بود دست شما درد نکنه.

لطفاً کدهای php را بین تگهای [ php ] و [ php/ ] قرار دهید تا مقاله مرتب تر باشد.

ضمناً منبع مقاله را به صورت لینک قرار دهید.

متشکرم

۰۵-دى-۱۳۸۶, ۲۱:۲۱:۱۹
وب سایت ارسال‌ها
پاسخ
dokhatre iran آفلاین
تازه وارد

ارسال‌ها: 1
موضوع‌ها: 0
تاریخ عضویت: اسفند ۱۳۸۸

تشکرها : 0
( 0 تشکر در 0 ارسال )
ارسال: #5
RE: ساخت صفحه ورود اطلاعات با PHP
(۰۷-آبان-۱۳۸۶, ۱۳:۰۵:۲۳)ΛΛ Θ l-l $ Σ Ω نوشته است: روش ساختن صفحه ورود اطلاعات با PHP رو ميشه به من بگيد.
مثلا نام ، نام خانوادگي ، ايميل ، رو بگيره و يه جا ذخيره كنه.
۱۹-اسفند-۱۳۸۸, ۱۱:۰۸:۳۶
ارسال‌ها
پاسخ
babyy آفلاین
بازنشسته
*****

ارسال‌ها: 3,095
موضوع‌ها: 141
تاریخ عضویت: مرداد ۱۳۸۷

تشکرها : 35081
( 26090 تشکر در 9068 ارسال )
ارسال: #6
RE: ساخت صفحه ورود اطلاعات با PHP
(۱۹-اسفند-۱۳۸۸, ۱۱:۰۸:۳۶)dokhatre iran نوشته است:
(۰۷-آبان-۱۳۸۶, ۱۳:۰۵:۲۳)ΛΛ Θ l-l $ Σ Ω نوشته است: روش ساختن صفحه ورود اطلاعات با PHP رو ميشه به من بگيد.
مثلا نام ، نام خانوادگي ، ايميل ، رو بگيره و يه جا ذخيره كنه.

این لینک رو ببینید ؛ کمکتون میکنه
http://forum.iranled.com/showthread.php?...2#pid41362
۱۹-اسفند-۱۳۸۸, ۱۴:۳۴:۵۰
وب سایت ارسال‌ها
پاسخ
tita آفلاین
تازه وارد

ارسال‌ها: 1
موضوع‌ها: 0
تاریخ عضویت: آبان ۱۳۸۸

تشکرها : 0
( 0 تشکر در 0 ارسال )
ارسال: #7
RE: ساخت صفحه ورود اطلاعات با PHP
كسي ميتونه يه متن راجع به اينكه پورتال خبري چيه براي من بذاره ؟
۰۳-فروردین-۱۳۸۹, ۰۸:۴۴:۱۹
ارسال‌ها
پاسخ
miyandari آفلاین
تازه وارد

ارسال‌ها: 1
موضوع‌ها: 0
تاریخ عضویت: فروردین ۱۳۹۱

تشکرها : 0
( 0 تشکر در 0 ارسال )
ارسال: #8
RE: ساخت صفحه ورود اطلاعات با PHP
(۰۷-آبان-۱۳۸۶, ۱۳:۰۵:۲۳)ΛΛ Θ l-l $ Σ Ω نوشته است: روش ساختن صفحه ورود اطلاعات با PHP رو ميشه به من بگيد.
مثلا نام ، نام خانوادگي ، ايميل ، رو بگيره و يه جا ذخيره كنه.

با سلام و تشکر از آموزش جامعتون

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

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


۳۰-فروردین-۱۳۹۱, ۰۱:۲۸:۰۲
ارسال‌ها
پاسخ


موضوعات مرتبط با این موضوع...
موضوع نویسنده پاسخ بازدید آخرین ارسال
  بازیابی اطلاعات تصادفی از بانک javaweb 4 3,128 ۲۱-آبان-۱۳۹۲, ۰۹:۱۴:۱۲
آخرین ارسال: javaweb
Exclamation [سوال] تشخیص refresh صفحه php crafcrab 9 7,116 ۰۶-مهر-۱۳۹۲, ۱۷:۱۸:۵۵
آخرین ارسال: code91
  به دست آوردن اطلاعات alih110 9 7,993 ۱۴-بهمن-۱۳۹۱, ۲۱:۳۴:۴۶
آخرین ارسال: babyy
Exclamation [سوال] می خوام محدودیت برا صفحه بزارم اما چطوری ؟ ramtin-w 1 1,907 ۱۸-بهمن-۱۳۹۰, ۱۵:۲۹:۴۹
آخرین ارسال: Ghoghnus
  دریافت اطلاعات و ارسال آن به ایمیل shabtabj 4 4,325 ۰۶-مرداد-۱۳۹۰, ۰۲:۱۷:۵۳
آخرین ارسال: shabtabj
  انتقال اطلاعات از یوزر به سرور و برعکس پارسا صدقی 4 4,872 ۱۴-دى-۱۳۸۸, ۱۸:۴۳:۱۸
آخرین ارسال: kimiafars
  ارسال اطلاعات وب فرم به Email gholom 1 5,352 ۱۲-اسفند-۱۳۸۷, ۱۴:۳۹:۲۰
آخرین ارسال: babyy
  هدايت صفحه به صورت اتوماتيك hamidsina 4 4,517 ۱۶-دى-۱۳۸۷, ۲۳:۱۲:۴۵
آخرین ارسال: ha_60
  فرستادن متغير به صفحه ديگر hamidsina 12 11,542 ۱۵-دى-۱۳۸۷, ۱۴:۴۶:۴۳
آخرین ارسال: hamidsina
  استفاده از متد post برای ارسال اطلاعات parsimage 1 3,971 ۱۱-آذر-۱۳۸۷, ۰۰:۱۴:۵۸
آخرین ارسال: man4toman

پرش به انجمن:


کاربرانِ درحال بازدید از این موضوع: 5 مهمان

صفحه‌ی تماس | IranVig | بازگشت به بالا | | بایگانی | پیوند سایتی RSS