PDA

توجه ! این یک نسخه آرشیو شده میباشد و در این حالت شما عکسی را مشاهده نمیکنید برای مشاهده کامل متن و عکسها بر روی لینک مقابل کلیک کنید : آموزش ساخت سيستم كاربري - ورود/عضويت



Rezash
August 27th, 2010, 00:24
آموزش ساخت سيستم كاربري
اين مطلب رو در راستاي آموزش ساخت سيستم وبلاگ دهي مي نويسم و بعلاوه گفتم تو يك آموزش جدا باشه تا اگه كسي فقط دنبال همين بود هم راحت بهش برسه
خيلي خلاصه مي گم
كاربر وارد سايت ميشه
بررسي مي كنيم آيا قبلا كاربر وارد سايت شده يا نه
اگر وارد شده بود يعني 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
session_start();
//ادامه
?>

حالا كه اين تابع رو زديم پي اچ پي مي گرده ببينه آيا اين كاربر براش سشن آي دي تعريف شده؟اگه شده آيا معتبر هست يا نه.
اگر درست بود كه اطلاعات فايل ذخيره شده در پوشه tmp مطابق با اين شناسه در قالب يك آرايه پيش فرض به نام $_SESSION در برنامه قابل استفاده خواهند بود.
و در غير اين صورت يك شناسه معتبر به كاربر تعلق مي گيره و يك جلسه جديد براي كاربر ايجاد ميشه
تابع isset
اين تابع ربطي به سشن ها نداره! با اين تابع مي تونيم بفهمين آيا يك متغير تعريف شده يا نه
برنامه زير رو ببنيد:
index.php


<?php
session_start();
if(isset($_SESSION['username']))
echo "welcome, ".$_SESSION['username'];
else
echo "Please Login/register";
?>
در خط سوم گفتم اگر در آرايه $_SESSION ايندكسي به اسم username كه يك اسم دلخواه و انتخابي توسط خودم هست؛وجود داشت يعني كاربر وارد شده و در غير اينصوت به كاربر اطلاعات ورود/عضويت رو نشون بده
حالا يك فرم html ساده مي سازم
login.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
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
session_destroy();
HEADER('LOCATION: index.php');
?>

انشالله در ادامه مبحث عضو گيري رو هم ميگم و و استفاده از كدها رو با ديتابيس پيش م بريم تا كمي به واقعيت نزديك تر بشيم:)

alisc
August 27th, 2010, 13:06
با تشکر فراوان ،
خیلی وقت بود دنبال همچین چیزی می گشتم ، فقط ای کاش میشد ، یک سیستم خودتون مینوشتید و قرار میدادید ، یک سیستم ساده که یوزرنیم و پسوورد بخواد و وقتی درست بود وارد بشه و نبود همونجوری بمونه . اینجوری ما دانلود میکردیم و تک تک کد ها رو آنالیز میکردیم بیشتر میتونستیم روش تمرکز بگیریم .

در کل دستتون دردنکنه .کارجالبی انجام دادید

Rezash
August 27th, 2010, 13:12
خواهش مي كنم
اتفاقا قصد همين كار رو دارم ، فرصت كنم ادامه آموزش رو مي نويسم و در آخر فايل ها + ساختار جدول رو مي ذارم.

AmirHosein
August 28th, 2010, 11:22
من این رو ساختم تست هم کردم چیز جالبی هست اما دیتابیس یه چیز دیگس/:)

alisc
August 28th, 2010, 15:29
من این رو ساختم تست هم کردم چیز جالبی هست اما دیتابیس یه چیز دیگس/:)

خیلی خیلی خیلی ممنون ، زحمت کشیدید .

فقط یک سوال : چه جوری میشه داخل این کد تعداد زیادی یوزرنیم و پسوورد ذخیره کرد ؟

یک سوال دیگه : خوب اینجوری ، اگر کسی فایل Login.php رو از روی هاست برداره تمام یوزنیم و پسوورد ها رو میتونه مشاهده کنه که ! راهی نداره کاری کرد کسی نتونه اون فایل رو ببینه و نشه اون رو از رو هاست دانلود کرد ؟


با تشکر فراوان

---------- Post added at 03:29 PM ---------- Previous post was at 03:23 PM ----------

میشه به روش دیتابیس هم توضیح بدید ؟

Rezash
August 28th, 2010, 15:36
سلام

انشالله در ادامه مبحث عضو گيري رو هم ميگم و و استفاده از كدها رو با ديتابيس پيش م بريم تا كمي به واقعيت نزديك تر بشيم :)
منظورم از اينكه به واقعيت نزديك بشيم همين ها بود كه گفتيد!
فقط مفاهيم اوليه رو توضيح دادم ، ان شالله فرصت كنم تو يك جلسه با ديتابيس ادامه ميدم و يكي هم براي تامين امنيتش ;)

---------- Post added at 03:36 PM ---------- Previous post was at 03:35 PM ----------


فقط یک سوال : چه جوری میشه داخل این کد تعداد زیادی یوزرنیم و پسوورد ذخیره کرد ؟
تو شرطي كه نوشتم ميشه دستي اضافه كرد،ولي اينو گذاشتم باري register.php كه با ديتابيس توضيحش مي دم

alisc
August 28th, 2010, 17:13
سلام

منظورم از اينكه به واقعيت نزديك بشيم همين ها بود كه گفتيد!
فقط مفاهيم اوليه رو توضيح دادم ، ان شالله فرصت كنم تو يك جلسه با ديتابيس ادامه ميدم و يكي هم براي تامين امنيتش ;)

---------- Post added at 03:36 PM ---------- Previous post was at 03:35 PM ----------


تو شرطي كه نوشتم ميشه دستي اضافه كرد،ولي اينو گذاشتم باري register.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!');
?>

میشه خودتون دوتا کاربر اضافه کنید ، ببینیم کدوم کدها رو باید اضافه کرد ؟

با تشکر فراوان

AmirHosein
August 28th, 2010, 17:57
کجاش میشه اضافه کرد ؟

<?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!');
?>

میشه خودتون دوتا کاربر اضافه کنید ، ببینیم کدوم کدها رو باید اضافه کرد ؟

با تشکر فراوان

کمی صبر کنید آموزش با دیتابیس رو قرار میدن این فقط یه نمومه کوچک هست
اندکی صبر :104:

Rezash
August 28th, 2010, 18:00
<?php
session_start();
if(isset($_POST['username']) && isset($_POST['password']))
if(
($_POST['username'] == 'reza' && $_POST['password'] == 'test')
OR
($_POST['username'] == 'user2' && $_POST['password'] == 'pass2')
OR
($_POST['username'] == 'user3' && $_POST['password'] == 'pass3')
)

{
$_SESSION['username'] = 'reza';
HEADER('LOCATION: index.php');
}
else
die('wrong username/password!');
?>

يا اگه به شكل بهتر و با آرايه ها و با استفاده از اين آموزش بخوايم بنويسيم اينطوري ميشه:
http://www.webhostingtalk.ir/f148/آرایه-ها-در-php-13562/


<?php
$users = array(
'user1'=>'pass1',
'user2'=>'pass2',
'user3'=>'pass3',
'user4'=>'pass4',
'user5'=>'pass5',
);
$login = false;
if(isset($users[$_POST['username']))
if($users[$_POST['username']] == $_POST['password'])
$login = true;
if($login)
{
$_SESSION['username'] = $_POST['username'];
HEADER('LOCATION: index.php');
}
else
die('wrong username/password!');
?>


البته اين روش ها در مقايسه با ديتابيس خيلي ضعيف تر هستند.

alisc
August 29th, 2010, 10:20
hello عزیز ، ممنون ، لطف کردی .

Am!r عزیز ، منتظر اموزش با دیتابیس هستیم .

alisc
August 31st, 2010, 10:34
همچنان منتظریم . . .

asrhosting
August 31st, 2010, 14:47
سلام
hi . علیکم . سلام . hello . درود و ... ( نام کاربیتون به چند زبان زنده دنیا ! L-) )
خوبی عزیز ....
یه عالمه برنامه نویسی براتون دارم اگر می تونید حتما با چت : آی دی من : takhoster

پولش رو هم بهتون می دیم ، اگر هم اسرار کردی پول نمی گیری خوب ما هم پول نمی دیم



با تشکر فراوان

Rezash
August 31st, 2010, 15:33
سلام
دوستان ممنون ، لطف داريد.
كاش تاپيك رو بي جهت شلوغ نمي كرديد تا ادامه آموزش رو وقتي نوشتم در ادامه مطالب مي ذاشتم:)
در مورد كار برنامه نويسي هم مي تونيد تماس بگيريد ولي با تعداد پروژه هاي فعالي كه دارم بعيد مي دونم بتونم قبول كنم.(5 پروژه بزرگ رو دارم انجام ميدم!)

Rezash
September 1st, 2010, 01:10
سلام
بالاخره رسيدم سر وقت ادامه آموزش!
خب حالا فرض كنيد قرار هست بيش از يك يا چند كاربر داشته باشيم،و عضو گيري هم بكنيم در اين صورت بهتر گزينه استفاده از ديتابيس هست
خب يك جدول خيلي ساده براي اعضا در نظر مي گيرم
1. شناسه اي منحصر به فرد براي هر عضو
2. نام كاربري
3. رمز عبور
4. نام كاربر
پس ابتدا يك ديتابيس جديد بسازيم :

CREATE DATABASE `learn` ;
حالا جدول مورد نيازمون

CREATE TABLE `learn`.`user` (
`id` INT( 10 ) NOT NULL AUTO_INCREMENT PRIMARY KEY ,
`user` VARCHAR( 255 ) NOT NULL ,
`pass` VARCHAR( 255 ) NOT NULL ,
`name` VARCHAR( 255 ) NOT NULL
) ENGINE = InnoDB CHARACTER SET utf8 COLLATE utf8_general_ci
اگر با دستورات sql آشنايي نداريد هيچ جاي نگراني نيست؛ چون با php my admin و ابزارهاي مشابه مي تونيد اين ضعف رو بهبود ببخشيد
اندكي توضيح در مورد اين كد
دستور Creat table كه از نامش مشخصه يك جدول ايجاد مي كنه!
`learn`.`user`
در اينجا learn نام ديتابيس و user نام جدول ما هست. مي تونيم از به كاربردن كلمه learn كه اسم ديتابيس هست صرف نظر كنيم البته در صورتي كه در برنامه همزمان با بيش از يك ديتابيس در ارتباط نباشيم.
id همون شناسه كاربر هست كه از نوع عدد صحيح و حداكثر 10 رقمي تعريفش كردم
در خصوصيت اين شناسه و موارد بعدي NOT NULL زدم يعني مقدار اين فيلد ها نبايد تهي باشد
شناسه خاصيت مهمي داره به نام AUTO_INCREMENT كه براي فيلد ها اصلي و عددي استفاده ميشه
در واقع به ازاي هر كاربر جديدي كه به ديتابيس اضافه مي كنيم اين فيلد به صورت خودكار يك واحد براي اون كاربر افزايش پيدا مي كنه
COLLATE جدول رو هم utf گذاشتم تا از utf پشتيباني بشه!
--
خب حالا بريم سر وقت كد نويسي
فايل config.php
اين فايل براي اتصال به ديتابيس استفاده شده كه در ادامه توضيح ميدم:

<?php
$server = 'localhost';
$username = 'root';
$password = 'mysql';
$database = 'amozesh';
$Connection = mysql_connect( $server , $username , $password ) or die(mysql_error());
mysql_select_db( $database , $Connection ) or die(mysql_error());
?>
تابع mysql_connect رو چند باري توضيح دادم پس نقل قول ميزنم:
mysql_connect : اين تابع سه آرگومان (ورودي) اجباري مي گيرد که اولي نام هاست،دومي نام کاربري ديتا بيس و سومي کلمه عبور ديتا بيس مي باشد.
mysql_select_db : ديتابيس شما را با توجه به اطلاعات داده شده در مرحله قبل انتخاب مي کند تا بتواني عملياتي مانند نوشتن،خواندن،حذف و ... را انجام بديد.
فكر نكنم اين بخش كد چيز خاصي داشته باشه
فرم ثبت نام:

<form action="signup.php" method="post">
Username : <input name="user" type="text" /><br>
Password : <input name="pass" type="password" /><br>
Name : <input name="name" type="text" /><br>
<input name="submit" type="submit" value="register!"></form>
فرم خيلي ساده نوشته شده ؛ فقط قسمت هاي action و method و name رو دقت كنيد كه بعدا ازشون استفاده مي شه در برنامه.
عضو گيري - فايل signup.php

<?php
include('config.php');
if(empty($_POST['user']))
die('username is empty!');
if(empty($_POST['pass']))
die('password is empty!');
if(empty($_POST['name']))
die('name is empty!');
$user = $_POST['user'];
$pass = $_POST['pass'];
$name = $_POST['name'];

mysql_query("INSERT INTO `user` SET `user`='$user',`pass`='$pass',`name`='$name'") or die(mysql_error());
echo "Registeration was successfull! now login!";
?>
در خط 2 فايل اتصال به ديتابيس رو لود كردم، درواقع اين تنظيمات رو در يك فايل ديگه نوشتم تا هر بار و در هر بخش مجبور به تكرارش نباشيم
در خط 3 الي 8 چك كردم كه مقاديري كه از فرم ارسال شده اند خالي نباشند.
در سه خط بعدي اين مقادير رو به سه متغير كمكي با نام دلخواه نسبت دادم
در خط بعدي در تابع mysql_query يوزر جديد رو اضافه كردم!
براي افزودن يك ركورد به جدول بايد از INSERT استفاده كنيم
من query رو به زبان فارسي بيان مي كنم :
در داخل جدول user سطر جديدي درج كن كه در آن مقدار فيلد user برابر متغير user ، فيلد رمز عبور برابر متغير رمز عبور و نام برابر متغير نام باشد.
خارج از تابع
در غير اين صورت برنامه خاتمه پيدا كنيد (or die)
كه در داخل die خروجي رو mysql_error گذاشتم.اين تابع خطاي رخ داده رو بر مي گردونه و مي تونيم بفهميم اشكال كار كجا بوده
در خط آخر پيام موفقيت در عضويت رو بيان كردم!
فرم ورود -- login.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>
اين فرم رو در ابتداي آموزش داشتيم.
فايل login.php

<?php
session_start();
include('config.php');
if(isset($_POST['username']) && isset($_POST['password']))
{
$username = $_POST['username'];
$query = mysql_query("SELECT `pass` FROM `user` WHERE `user`='$username'") or die(mysql_error());
$data = mysql_fetch_array($query);
if($data['pass'] == $_POST['password'])
{
$_SESSION['username'] = $_POST['username'];
HEADER('LOCATION: index.php');
}
else
die('wrong username/password!');
}

?>
تنها تغييري كه در اين فايل نسبت به فايل آغاز برنامه داشتيم ، اين بود كه اطلاعات اعضا رو از ديتابيس مي كشيم بيرون و اعتبار سنجي مي كنيم
من هم فقط بخش هاي تغيير يافته رو توضيح ميدم
خط 7 : انتخاب كن ، مقدار فيلدي با نام pass را از جدول user در جايي كه فيلد username برابر با متغير $username باشد
در خط بعد ، تابع mysql_fetch_array() نتيجه به دست آمده از تابع mysql_query رو در قالب يك آرايه مي ريزه
پ.ن : براي درك بهتر متغير $data رو از تابع print_r رد كنيد
چون اين تابع رو هم در آموزش هاي ديگه توضيخ دادم بيشتر از اين روش نمي مونم
در خط بعدي بررسي كردم كه اگر مقدار پسورد موجود در آرايه data با مقدار پسوردي كه كاربر در فرم ارسال كرده يكسان بود لوگين كن و گرنه پيغام خطا بده
logout هم كه تغيير خاصي نكرده.
خواستم به قولي كه دادم عمل كرده باشم و آموزش رو امشب گذاشته باشم ، ببخشيد كمي خسته بودم!جايي رو اگه بد توضيح دادم بگيد تا بيشتر توضيح بدم
فايل zip شده فايل ها رو هم گذاشتم.
سپاس :)

alisc
September 1st, 2010, 11:44
مرسی hello =D>=D>=D>

---------- Post added at 10:51 AM ---------- Previous post was at 10:46 AM ----------



پس ابتدا يك ديتابيس جديد بسازيم :

CREATE DATABASE `learn` ;
حالا جدول مورد نيازمون

CREATE TABLE `learn`.`user` (
`id` INT( 10 ) NOT NULL AUTO_INCREMENT PRIMARY KEY ,
`user` VARCHAR( 255 ) NOT NULL ,
`pass` VARCHAR( 255 ) NOT NULL ,
`name` VARCHAR( 255 ) NOT NULL
) ENGINE = InnoDB CHARACTER SET utf8 COLLATE utf8_general_ci
اگر با دستورات sql آشنايي نداريد هيچ جاي نگراني نيست؛ چون با php my admin و ابزارهاي مشابه مي تونيد اين ضعف رو بهبود ببخشيد
اندكي توضيح در مورد اين كد
دستور Creat table كه از نامش مشخصه يك جدول ايجاد مي كنه!
`learn`.`user`
در اينجا learn نام ديتابيس و user نام جدول ما هست. مي تونيم از به كاربردن كلمه learn كه اسم ديتابيس هست صرف نظر كنيم البته در صورتي كه در برنامه همزمان با بيش از يك ديتابيس در ارتباط نباشيم.
id همون شناسه كاربر هست كه از نوع عدد صحيح و حداكثر 10 رقمي تعريفش كردم
در خصوصيت اين شناسه و موارد بعدي NOT NULL زدم يعني مقدار اين فيلد ها نبايد تهي باشد
شناسه خاصيت مهمي داره به نام AUTO_INCREMENT كه براي فيلد ها اصلي و عددي استفاده ميشه
در واقع به ازاي هر كاربر جديدي كه به ديتابيس اضافه مي كنيم اين فيلد به صورت خودكار يك واحد براي اون كاربر افزايش پيدا مي كنه
COLLATE جدول رو هم utf گذاشتم تا از utf پشتيباني بشه!
--


ممنون ، یه سوال :

این کدها رو باید داخل php myadmin گذاشت کجاش ؟ چه جوری ؟
یا باید این فیلدها رو دونه دونه ساخت ؟

میشه اینها رو داخل یه فایل txt ذخیره کرد و بعد Import کرد ؟

---------- Post added at 11:44 AM ---------- Previous post was at 10:51 AM ----------

من ان کار ها رو انجام دادم ، ثبت نام با موفقیت انجام میشه . اما وارد نمیشه !!! ( هنگام ورود با پیغام wrong username/password! مواجه میشم !

Rezash
September 1st, 2010, 12:06
سلام
خواهش مي كنم
دستورات sql رو ميتونيد در phpmyadmin از تب sql وارد كنيد يا اينكه به صورت فايلا ذخيره و import كنيد.
در مورد مشكل ورود،بعد از عضويت به phpmyadmin بريد ، ديتابيس و سپس جدول رو انتخاب و browse رو بزنيد و ببينيد آيا يوزر ايجاد شده يا نه؟

rezamahmodi
September 3rd, 2010, 00:17
با احترام،

بطور کلی php به دو روش بر روی سرویس دهنده وب قابل نصب است. در روش اول php به صورت CGI و در روش دوم هم به صورت ماجول های ثابت یا پویا نصب می گردد.
مفاهیم CGI و ماجول های ثابت یا پویا برایم غیر قابل فهم می باشد.؟

alisc
September 3rd, 2010, 14:47
میشه کاری کرد که کاربر بعد از ثبت نام براش یه ایمیل ارسال بشه ! ( به صورت اتوماتیک )

---------- Post added at 02:47 PM ---------- Previous post was at 02:06 PM ----------


سلام
خواهش مي كنم
دستورات sql رو ميتونيد در phpmyadmin از تب sql وارد كنيد يا اينكه به صورت فايلا ذخيره و import كنيد.
در مورد مشكل ورود،بعد از عضويت به phpmyadmin بريد ، ديتابيس و سپس جدول رو انتخاب و browse رو بزنيد و ببينيد آيا يوزر ايجاد شده يا نه؟

بله یوزر با موفقیت ایجاد میشه و داخل دیتابیس هم مشخصاتش هست فقط هنگام ورود با پیغام Please Login/register روبه رو می شوم !

مشکل کجاست ؟

Rezash
September 3rd, 2010, 15:00
@rezamahmodi : جواب سوالتون رو نمي دونم متاسفانه ، تو سايت هاي خاجي زيادي مي چزخم و مفاهيمي رو كه دنبالشون هستم رو هميشه از اونجا پيدا مي كنم، اگه در مورد سوالتون بيشتر توضيح بديد و اصطلاحات انگليسي رو كامل بذاريد مي تونم بگردم. يا هم اگر دوست ديگه اي در اين زمينه اطلاعات داشت راهنمايي كنه.
@alisc : ْآموزش رو هنوز قصد دارم ادامه بدم، اين مورد رو هم انشالله توضيح مي دم.با تابع mail ميشه:
PHP: mail - Manual (http://php.net/manual/en/function.mail.php)
بله ، يك اشتباه در كد دارم ! در فايل index.php فايلي كه گذاشتم يادم رفته ر خط دوم session_start رو به كار بگيرم...

alisc
September 3rd, 2010, 17:57
@rezamahmodi
بله ، يك اشتباه در كد دارم ! در فايل index.php فايلي كه گذاشتم يادم رفته ر خط دوم session_start رو به كار بگيرم...

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

Rezash
September 3rd, 2010, 18:08
اصلاح شدش ميشه اينكه در فايل index.php بعد از تگ <?php تابع رو بكار بگيريم


<?php
session_start();
//ادامه كد


---------- Post added at 06:08 PM ---------- Previous post was at 06:07 PM ----------

راستي در مورد mail هم : http://www.webhostingtalk.ir/f148/14576/

alisc
September 4th, 2010, 14:40
Hello جان ممنون از آموزش خوبت . استفاده کردیم .

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

مثلا : user1 صفحه index1.html رو ببینه و user2 صفحه index5.html

وقتی شما این تاپیک رو ایجاد کردید ، فهمیدم با این سیستمی که شما نوشتید شاید بشه این کار رو انجام داد ، آیا میشه ؟؟؟ ( اگر میشه ، هر کی وقت کردید میشه اون رو هم توضیح بدید . )

>:D<

Rezash
September 4th, 2010, 22:18
Hello جان ممنون از آموزش خوبت . استفاده کردیم .

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

مثلا : user1 صفحه index1.html رو ببینه و user2 صفحه index5.html

وقتی شما این تاپیک رو ایجاد کردید ، فهمیدم با این سیستمی که شما نوشتید شاید بشه این کار رو انجام داد ، آیا میشه ؟؟؟ ( اگر میشه ، هر کی وقت کردید میشه اون رو هم توضیح بدید . )

>:D<

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

shamimi
September 14th, 2010, 10:22
سلام دوستان
این آموزشی که دنبالش بودید ورود/عضويت همراه XML بدون نیاز به دیتابیس و ثبت اطلاعات پسورد بصورت MD5
امیدوارم استفاده کنید...
http://upfile.irhost.org/uploads/xml-user-system.zip
نظر یادتون نره

alborzhost
October 12th, 2010, 00:40
سلام

من این صفحه رو ایجاد کردم و به راحتی لوگین میشه !
یک سوال دارم : من تعدادی صفحه دارم و میخوام با یوزر پسی که وارد کردم بتونم به هموشون دسترسی داشته باشم.

مثلا سایت 4 بخشه یک بار که پس رو دادم بتونم به صفحه های دیگه هم دسترسی داشته باشم تا زمانی که خروج نزدم.

تشکر

rn4j1m1
October 12th, 2010, 01:02
سلام

من این صفحه رو ایجاد کردم و به راحتی لوگین میشه !
یک سوال دارم : من تعدادی صفحه دارم و میخوام با یوزر پسی که وارد کردم بتونم به هموشون دسترسی داشته باشم.

مثلا سایت 4 بخشه یک بار که پس رو دادم بتونم به صفحه های دیگه هم دسترسی داشته باشم تا زمانی که خروج نزدم.

تشکر

با اجازه hello
شما باید اول هر صفحه این که کاربر وارد شده (session) یا نه رو چک کنید و اگه وارد نشده بود اون رو به صفحه لوگین منتقل کنید

alborzhost
October 12th, 2010, 01:04
با اجازه hello
شما باید اول هر صفحه این که کاربر وارد شده (session) یا نه رو چک کنید و اگه وارد نشده بود اون رو به صفحه لوگین منتقل کنید

خوب مشکلم همین جاست :دی
کمی توضیح میدید چطوری چک کنم ؟!

texas
October 12th, 2010, 01:13
ببين شما بايد با يك شرx در اول هر صفحه از وجود session اطمينان پيدا كنيد كد زير رو ببينيد


if(isset($_SESSION['username']))
{
$username=$_SESSION['username'];
}
else {
print "كاربر معتبر نيست";
}

كه اين كد بالا مربوط به سشني به نام username كه ما قبلآ در هنگام لوگين ايجاد كرديم هستش

Rezash
October 12th, 2010, 01:54
كدي رو كه در صفحه index.php داشتيم :


<?php
session_start();
if(isset($_SESSION['username']))
echo "welcome, ".$_SESSION['username'];
else
echo "Please Login/register";
?>

مي توانيم براي ساير صفحات نيز كپي كنيم.مثلا در صفحه اي براي ثبت فيش
fish.php


<?php
session_start();
if(isset($_SESSION['username']))
{
echo "
كد فرم اچ تي ام ال فيش
";
}
else
{
echo "براي دسترسي به اين بخش ابتدا يا بايد وارد/عضو شويد.";
}
?>

alisc
October 12th, 2010, 10:28
hello عزیز ، ممنون ،
حالا میشه اون آموزشی که من سری پیش خواسته بودم رو هم قرار بدی ؟؟؟

آموزشی که هر کاربری که یوزرنیم وپسوورد روداد یک صفحه خاص از پیش تعیین شده رو ببینه :

مثلا کاربر با یوزرنیم 123 : صفحه 5 رو ببینه .
کاربر با یوزرنیم 321 صفحه 4 رو ببینه .

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

navidahwaz
October 12th, 2010, 12:48
آموزش مفیدی بود
متشکرم

Rezash
October 13th, 2010, 19:50
سلام
در ادامه آموزش قصد دارم به آموزش ساخت پروفايل يا صفحات شخصي براي هر كاربر بپردازيم.
گريزي به آخرين مطلب بخش آموزش :

خب يك جدول خيلي ساده براي اعضا در نظر مي گيرم
1. شناسه اي منحصر به فرد براي هر عضو
2. نام كاربري
3. رمز عبور
4. نام كاربر
قسمت بولد شده رو توجه كنيد.
در واقع ما براي هر كاربر يك شناسه در نظر مي گيريم و اين شناسه منحصر به فرد هست
درست مانند شماره دانشجويي هر دانشجو
وجود اين id اختصاصي باعث ميشه ما در جداول خودمون بتونيم به جاي تكرار مكرر نام كاربري يك كاربر خودداري كنيم
مثلا اگر به همين اسكريپت قرار باشه يك جدول براي ارسال مطلب اضافه كنيم نيازي نيست در جدول نام كاربري نويسنده رو ذخيره كنيم و فقط كافيست شناسه كاربر رو ذخيره كنيم
اين كار باعث ميشه از تكرار عمدي يا اجتناب ناپذير جلوگيري بشه
و عمليات ويرايش راحت تر صورت بگيره
(البته من يك استفاده ساده و كلي رو بازبان خودم گفتم و در عمل و اصول استفاده مهم تري هم دارد.)
البته اين برنامه نويس هست كه بايد تشخيص در چه جايي تكرار مفيد هست و در چه جايي خير
براي مثال در mybb به خاطر شرايط يك انجمن ،‌ در جدول تاپيك هم نام كاربري و آي دي كاربر هر دو باهم ذخيره مي شوند!
خب به جاي حاشيه پردازي كد profile.php رو ميسازيم :


<?php
//session start function : بايد قبل از هر خروجي اي و فقط يك بار در كد فراخواني شود.
session_start();
if(!isset($_SESSION['username']))
die('Please Login/register');
echo "<h1> Your personal Profile </h1>";
echo "welcome, ".$_SESSION['username'];
$username = $_SESSION['username'];
$query = "SELECT * FROM `user` WHERE `user`='$username' LIMIT 1";
$mysql_q = mysql_query($query) or die(mysql_error());
if(mysql_num_rows($mysql_q) <= 0)
die('Invalid login session!');
$data = mysql_fetch_array($mysql_q);
echo "<br> Your name is : ";
echo $data['name'];
echo "<br>Your Personal id is :";
echo $data['id'];
?>

خط اول : آغاز تگ php
خط دوم : دستور session_start جهت ايجاد سشن آي دي جديد در صورت عدم وجو يا استفاده از سشن هاي موجود
خط سوم : بررسي صحت وجود سشن نام كاربري
خط چهارم : خروج اجباري از برنامه و نمايش خطا در صورت صحيح بودن شرط خط دوم (لوگين نبودن(
خط پنجم : نمايش يك پيغام - از اين خط به بعد ظاهرا كاربر لوگين كرده كرده است
خط ششم : نمايش نام كاربري كاربر
خط هفتم : انتساب مقدار موجود در سشن نام كاربري به يك متغير براي راحتي استفاده در خط بعدي
خط هشتم : يك كوئري - ترجمه فارسي كوئري :
انتخاب كن تمام فيلد هاي جدول (همان ستاره) را از جدول user كه فيلد user در آن برابر متغير username ميباشد و حداكثر يك ركورد را انتخاب كن
خط دهم : اجراي كوئري خط بالا
خط يازدهم : تابع mysql_num_rows ورودي اجباري اي دارد كه همان متغيري است كه به mysq_query انتساب داديم
اين تابع تعداد ركورد هاي انتخاب شده رو براي ما نشون ميده و اگر كوئري درست نباشه يك عدد منفي رو بر مي گردونه
بنابراين در اين خطا و خط بعدي چك مي كنيم اگه نتيجه اگر صفر يا منفي بود يعني چنين كاربري در ديتابيس وجود ندارد
مثلا ممكنه بعد از لوگين مدير كاربر رو از ليست حذف كرده باشه يا سشن جعلي باشه
بنابراين با يك بررسي ساده ميتونيم اين موضوع رو تشخصي بديم
در خط بعدي تابع mysql_fetch_array رو داريم
توصيه اكيد مي كنم اگر ميخواهيد كاركر اين تابع رو به درستي درك كنيد ابتدا چند كاربر بسازيد و سپس كد زير رو در زير خط جاري وارد كنيد و. نتيجه رو براي هر كاربر بررسي كنيد

print_r($data);
پ.ن : اين تابع رو قبلا و با ذكر همين نكته در پست : http://www.webhostingtalk.ir/f148/14266/index2.html#post142185 توضيح دادم
خب اين قسمت از آموزش مقدمه اي بر اصل مطلب بود
تا آخر هفته براي تكميل موضوع، قسمت ارسال مطلب توسط كاربران رو هم اضافه مي كنيم.
براحتي با همين كدهاي ساده ميتونيم امكاناتي مثل محدوديت دانلود براي كاربران يا كاربران خاص و از اين قبيل فراهم كنيم.
پ.ن مهم : باز هم تاكيد مي كنم فعلا نكات امنيتي رو در نظر نمي گيريم.
پ.ن 2 : لوكال سيستمم قطع بود ، كد رو تست نكردم ، اگر مشكلي گذارش بديد لطفا.
قسمت بعدي رو كامل تر و عملي تر مي نويسم.:67:
سپاس

Rezash
October 16th, 2010, 13:34
مجموع فايل ها تا الان در قالب يك فايل زيپ

vimax
November 3rd, 2010, 22:34
سلام میشه یه راهنمایی در مورد فارسی کردن تیبلها بکنید؟

mysql_query("SET SESSION collation_connection = 'utf8_persian_ci'");

یا


mysql_query("SET CHARACTER SET utf8;",$connection1);

یا


mysql_query("SET CHARACTER SET utf8;");

یا


ENGINE=MyISAM DEFAULT CHARSET=utf8


من کدوم یک از اینا رو استفاده کنم؟ تا وقتی تیبل میسازم فارسی بشه؟




if (mysql_query("create table $pagestable(
id int(9) unsigned not null auto_increment,
userid int(13) default '0' not null,
block text not null,

primary key(id),
key userid(userid)
);ENGINE=MyISAM DEFAULT CHARSET=utf8")) {
echo "table $pagestable created successfully<br>"; }
else { echo "<b>table $pagestable was not created ",mysql_error(),"</b><br>"; }


هر کردوم رو بعد mysql_query گذاشتم خطا میده

Rezash
November 3rd, 2010, 22:56
من خودم به اين صورت عمل مي كنم و مشكلي ندارم :
موقع ساخت جدول :


CREATE TABLE `testing`.`test` (
`test1` INT( 2 ) NOT NULL ,
`test2` INT( 2 ) NOT NULL
) ENGINE = InnoDB CHARACTER SET utf8 COLLATE utf8_general_ci

هنگام اتصال :


mysql_query("SET CHARACTER SET utf8;");
mysql_query("SET SESSION collation_connection = 'utf8_general_ci'");

vimax
November 4th, 2010, 02:18
ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_persian_ci;
اینو گذاشتم درست شد دی:
ممنون

aghaee
November 19th, 2010, 18:42
سلام
ممنون از آموزش عالی تون!

حالا این فرم لاگین و ... از امنیت کامل برخوردار هست؟؟؟

ممنون میشم امنیتش رو باهم کامل کنیم! جهت آموزش و یادگیری

مثلا کد کردن پسورد و ...

با تشکر

Rezash
November 19th, 2010, 19:03
سلام
ممنون از آموزش عالی تون!

حالا این فرم لاگین و ... از امنیت کامل برخوردار هست؟؟؟

ممنون میشم امنیتش رو باهم کامل کنیم! جهت آموزش و یادگیری

مثلا کد کردن پسورد و ...

با تشکر

خير ، به هيچ وجه امن نيست ! :دي
بزودي نحوه امن كردنش رو ميذارم ، كاري نداره كافيه روي متغير هاي ورودي فيل تر گذاشت + يك چند كار جزيي كوچيك.

aghaee
November 19th, 2010, 19:06
خير ، به هيچ وجه امن نيست ! :دي
بزودي نحوه امن كردنش رو ميذارم ، كاري نداره كافيه روي متغير هاي ورودي فيل تر گذاشت + يك چند كار جزيي كوچيك.

خیلی عجله دارم برای یاد گیریش کی میزارید آموزش رو؟
یه مبحثی هم هست که کد میکنه و... Md5 اینا چیه دیگه؟


با تشکر

Rezash
November 19th, 2010, 19:33
سعي مي كنم تا فردا شب بذارم
md5 يك الگوريتم برگشت ناپذير هست كه يك رشته ورودي رو ميگيره و مقدار 32 كاراكتري و منحصر به فردي رو به ما ميده.
ما به جاي ذخيره كردن پسورد به صورت خام ، اون رو به صورت md5 شده و حتي استفاده از الگوريتم هاي ديگه مثل sha1 استفاده مي كنيم و اين مقدار رو ذخيره مي كنيم.
اينجوري حتي اگه ديتابيس دست كسي بيوفته نميتونه به سادگي پسورد يوزر ها رو بدست بياره.
اما مورد مهمتر sql_injection كه بايد در اينجا رعايت بشه كه قبلا چكيده اي ازش صحبت كرديم : www.webhostingtalk.ir/f148/16193/
سپاس

aghaee
November 19th, 2010, 19:44
سعي مي كنم تا فردا شب بذارم
md5 يك الگوريتم برگشت ناپذير هست كه يك رشته ورودي رو ميگيره و مقدار 32 كاراكتري و منحصر به فردي رو به ما ميده.
ما به جاي ذخيره كردن پسورد به صورت خام ، اون رو به صورت md5 شده و حتي استفاده از الگوريتم هاي ديگه مثل sha1 استفاده مي كنيم و اين مقدار رو ذخيره مي كنيم.
اينجوري حتي اگه ديتابيس دست كسي بيوفته نميتونه به سادگي پسورد يوزر ها رو بدست بياره.
اما مورد مهمتر sql_injection كه بايد در اينجا رعايت بشه كه قبلا چكيده اي ازش صحبت كرديم : www.webhostingtalk.ir/f148/16193/
سپاس

با تشکر فروان
ولی آموزش sql_injection کامل نبود و در حد توضیح گفته شده بود

منتظر آموزش امن کردن این فرم هستیم!
+ اینکه logut این فرم درست کار نمی کنه! اگه میشه یه تستی بکنید

با تشکر

Rezash
December 2nd, 2010, 01:16
با توجه به قولي كه به دوستان داده بودم بخش جديد برنامه رو دارم آماده و تكميل مي كنم ،‌فعلا فايلي شامل تغييرات زير رو اتچ مي كنم كه توضيحاتش رو فردا مينويسم.
- فيـلتر گذاري روي كليه ورودي هاي كاربر جهت جلوگيري از حملات SQL INJECTION و ...
- اعتبار سنجي سشن ها باتوجه به آي پي و مشخصات مرورگر كاربر
- ارسال ايميل به مدير در هنگام عضوي جديد
مباحثي كه در آينده دنبال خواهيم كرد : (البته همه مباحث مربوطه به سيستم لوگين /عضويت نيست اما در كنار هم بودن اين عناصر ميتونه جذابيت خاصي به برنامه بده ;) )
- جلوگيري از ارسال مكرر فرم توسط ربات ها با كد امنيتي
- ارسال sms يا yahoo pm در هنگام عضويت به كاربر
- ارسال كد فعال سازي عضويت به ايميل يا sms يا yahoo مسنجر كاربر
- شناسايي خود كار كشور كاربر و تغيير خودكار زبان براي كاربر
- قابليت شارژ آنلاين اعتبار كاربر از طريق درگاه زرين پال
- قابليت ويرايش پروفايل
- اختصاص يك دفترچه يادداشت شخصي به هر كاربر
- استفاده از قالب هاي html بدون دخالت php
- استفاده آموزشي از ajax
- و مباحثي كه طرفدار داشته باشند.

aghaee
December 2nd, 2010, 04:03
با توجه به قولي كه به دوستان داده بودم بخش جديد برنامه رو دارم آماده و تكميل مي كنم ،‌فعلا فايلي شامل تغييرات زير رو اتچ مي كنم كه توضيحاتش رو فردا مينويسم.
- فيـلتر گذاري روي كليه ورودي هاي كاربر جهت جلوگيري از حملات SQL INJECTION و ...
- اعتبار سنجي سشن ها باتوجه به آي پي و مشخصات مرورگر كاربر
- ارسال ايميل به مدير در هنگام عضوي جديد
مباحثي كه در آينده دنبال خواهيم كرد : (البته همه مباحث مربوطه به سيستم لوگين /عضويت نيست اما در كنار هم بودن اين عناصر ميتونه جذابيت خاصي به برنامه بده ;) )
- جلوگيري از ارسال مكرر فرم توسط ربات ها با كد امنيتي
- ارسال sms يا yahoo pm در هنگام عضويت به كاربر
- ارسال كد فعال سازي عضويت به ايميل يا sms يا yahoo مسنجر كاربر
- شناسايي خود كار كشور كاربر و تغيير خودكار زبان براي كاربر
- قابليت شارژ آنلاين اعتبار كاربر از طريق درگاه زرين پال
- قابليت ويرايش پروفايل
- اختصاص يك دفترچه يادداشت شخصي به هر كاربر
- استفاده از قالب هاي html بدون دخالت php
- استفاده آموزشي از ajax
- و مباحثي كه طرفدار داشته باشند.

خیلی مخلصیم بامرام
منتظر هستیم که ادامه آموزش رو هم بذارید

با تشکر فراوان :53:

Rezash
December 17th, 2010, 13:34
در مورد SQL INJECTION :
در آخرين فايلي كه براي دانلود گذاشتم :
فايل config.php رو ببينيد :


function safe( $value ){
$value = trim( $value );
$value = mysql_real_escape_string( $value );
$value = htmlspecialchars($value);
$value = strip_tags($value);
$value = str_replace(array("<",">","'","ی","&amp;","ۜ"),array("&lt;","&gt;","'","ي","&","ي"),$value);
return $value;
}
function autosafe(&$value,$key){
$value = safe($value);
return $value;
}
array_walk($_POST,'autosafe');
array_walk($_GET,'autosafe');
array_walk($_COOKIE,'autosafe');
array_walk($_SESSION,'autosafe');

تابع safe:
ابتدا مقدار ورودي رو trim مي كنيم يعني فضاهاي خالي اول و آخرش رو حذف مي كنيم
mysql_real_escape_string : يك تابع فوق العاده سودمند براي حذف كاراكتر هاي ناخواسته و آماده سازي رشته ورودي براي استفاده در يك كوئري به صورت سالم . مثلا كاراكترهاي \x00, \n, \r, \, ', " and \x1a فيلتر ميشوند.
PHP: mysql_real_escape_string - Manual (http://php.net/manual/en/function.mysql-real-escape-string.php)
htmlspecialchars
تبديل كاراكترهاي html :
مثال :

* '&' (ampersand) becomes '&amp;'
* '"' (double quote) becomes '&quot;' when ENT_NOQUOTES is not set.
* ''' (single quote) becomes ''' only when ENT_QUOTES is set.
* '<' (less than) becomes '&lt;'
* '>' (greater than) becomes '&gt;'
PHP: htmlspecialchars - Manual (http://php.net/manual/en/function.htmlspecialchars.php)
strip_tags :
حذف تگ ها ، مثلا تگ اسكريپت و ...
PHP: strip_tags - Manual (http://php.net/manual/en/function.strip-tags.php)
تابع autosafe :
تابعي دست نويس براي اجراي خودكار تابع safe روي متغير هاي ورودي . اگر از نحوه كاركرد اين تابع و تابع بعدي يعني array_walk اطلاع نداريد توصيه ميكنم "آرايه ها در php" رو كه قبلا در همين انجمن نوشتم مطالعه كنيد.
-
جلوگيري و مقابله با جعل سشن :


$client = md5($_SERVER['REMOTE_ADDR'].$_SERVER['HTTP_USER_AGENT'].$_SERVER['SERVER_NAME']);
$_SESSION['client'] = $client;

يك راه كاملا ساده !
در كد بالا من تركيبي از آي پي كاربر ، مشخصات مرورگر كاربر و آدرس سايت رو در يك رشته تركيب و md5 كردم و داخل يك سشن ريختم
حالا در صفحات لوگين بايد چك كنم :


$client = md5($_SERVER['REMOTE_ADDR'].$_SERVER['HTTP_USER_AGENT'].$_SERVER['SERVER_NAME']);
if($client != $_SESSION['client'])
die("Dear User ! Your Login session expired,please re login");

با اينكار حتي اگه سشن يك يوزر جعل و د.زديده بشه باز هم هويتش جعل نميشه.
سعي كردم خلاصه بگم و بيشتر توابع رو php.ini ارجاع مي دم به دو دليل : 1. شلوغ نشدن غير ضروري تاپيك 2. درك سايت فوق العاده مفيد php.net
منتظر ادامه آموزش ها باشيد :53:

alisc
December 17th, 2010, 14:25
ممنون از آموزش های خوبتون ، اگر تونستید آموزش زیر رو هم قرار بدید ، من خیلی خیلی خیلی لارم دارم ، چند سری هم خدمتتون عرض کردم :)

من میخوام کاری کنم که وقتی مثلا کاربر : user1 یوزنیم و پسوورد خودش رو وارد کرد به صورت اتوماتیک به صفحه ای که من از قبل تایین می کنم بره

مثلا کاربر use1 صفحه html1 و ببینه
مثلا کاربر use2 صفحه html5 و ببینه
مثلا کاربر use21 صفحه html8 و ببینه

Rezash
December 17th, 2010, 14:36
ممنون از آموزش های خوبتون ، اگر تونستید آموزش زیر رو هم قرار بدید ، من خیلی خیلی خیلی لارم دارم ، چند سری هم خدمتتون عرض کردم :)

من میخوام کاری کنم که وقتی مثلا کاربر : user1 یوزنیم و پسوورد خودش رو وارد کرد به صورت اتوماتیک به صفحه ای که من از قبل تایین می کنم بره

مثلا کاربر use1 صفحه html1 و ببینه
مثلا کاربر use2 صفحه html5 و ببینه
مثلا کاربر use21 صفحه html8 و ببینه

خواهش مي كنم
در حال ساده :
در صفحه profile.php تغيير دادم


<?php
//session start function : بايد قبل از هر خروجي اي و فقط يك بار در كد فراخواني شود.
session_start();
if(!isset($_SESSION['username']) OR !isset($_SESSION['client']))
die('Please Login/register');
$client = md5($_SERVER['REMOTE_ADDR'].$_SERVER['HTTP_USER_AGENT'].$_SERVER['SERVER_NAME']);
if($client != $_SESSION['client'])
die("Dear User ! Your Login session expired,please re login");
echo "<h1> Your personal Profile </h1>";
echo "welcome, ".$_SESSION['username'];
$username = $_SESSION['username'];
$query = "SELECT * FROM `user` WHERE `user`='$username' LIMIT 1";
$mysql_q = mysql_query($query) or die(mysql_error());
if(mysql_num_rows($mysql_q) <= 0)
die('Invalid login session!');
if($username == 'user1')
{
HEADER("LOCATION : test1.html");die();
}
if($username == 'user2')
{
HEADER("LOCATION : test2.html");die();
}
?>

alisc
January 3rd, 2011, 11:50
با توجه به قولي كه به دوستان داده بودم بخش جديد برنامه رو دارم آماده و تكميل مي كنم ،‌فعلا فايلي شامل تغييرات زير رو اتچ مي كنم كه توضيحاتش رو فردا مينويسم.
- فيـلتر گذاري روي كليه ورودي هاي كاربر جهت جلوگيري از حملات SQL INJECTION و ...
- اعتبار سنجي سشن ها باتوجه به آي پي و مشخصات مرورگر كاربر
- ارسال ايميل به مدير در هنگام عضوي جديد
مباحثي كه در آينده دنبال خواهيم كرد : (البته همه مباحث مربوطه به سيستم لوگين /عضويت نيست اما در كنار هم بودن اين عناصر ميتونه جذابيت خاصي به برنامه بده ;) )
- جلوگيري از ارسال مكرر فرم توسط ربات ها با كد امنيتي
- ارسال sms يا yahoo pm در هنگام عضويت به كاربر
- ارسال كد فعال سازي عضويت به ايميل يا sms يا yahoo مسنجر كاربر
- شناسايي خود كار كشور كاربر و تغيير خودكار زبان براي كاربر
- قابليت شارژ آنلاين اعتبار كاربر از طريق درگاه زرين پال
- قابليت ويرايش پروفايل
- اختصاص يك دفترچه يادداشت شخصي به هر كاربر
- استفاده از قالب هاي html بدون دخالت php
- استفاده آموزشي از ajax
- و مباحثي كه طرفدار داشته باشند.

من اون فایل پیوست member-area.zip رو دانلود کردم ، موقعی که کاربر ثبت نام میکنه ، و فایل میخواد با فایل signup.php ارتباط برقرار کنه ارور زیر رو میده :

Parse error: parse error, expecting `')'' in C:\Program Files\EasyPHP 3.0\www\sc\config.php on line 7

مشکل از چیه ؟
این هم ساختار فایل :


<?php
$config = array(
'AdminEmail'=>'Yourmail@you.com',
'SendMailonreg'=>true,
'MailRegSubject'=>'New Member',
'MailRegBody'=>'New Member Registered !',
'headers' => 'From: Yourmail@you.com' . "\r\n" .'Reply-To: Yourmail@you.com' . "\r\n" .'X-Mailer: PHP/' . phpversion();
);
//db connection
$server = 'localhost';
$username = 'root';
$password = 'mysql';
$database = 'mysql';
$Connection = mysql_connect( $server , $username , $password ) or die(mysql_error());
mysql_select_db( $database , $Connection ) or die(mysql_error());
//data filtering
function safe( $value ){
$value = trim( $value );
$value = mysql_real_escape_string( $value );
$value = htmlspecialchars($value);
$value = strip_tags($value);
$value = str_replace(array("<",">","'","ی","&amp;","ۜ"),array("&lt;","&gt;","&#39;","ي","&","ي"),$value);
return $value;
}
function autosafe(&$value,$key){
$value = safe($value);
return $value;
}
array_walk($_POST,'autosafe');
array_walk($_GET,'autosafe');
array_walk($_COOKIE,'autosafe');
array_walk($_SESSION,'autosafe');

?>

texas
January 3rd, 2011, 11:57
سمي كالن بعد از تابع phpversion() اضافه هستش واسه همين ارور parse ميده

alisc
January 3rd, 2011, 12:00
من احتمال دادم مشکل بخاطره کد زیر باشه :


$config = array(
'AdminEmail'=>'Yourmail@you.com',
'SendMailonreg'=>true,
'MailRegSubject'=>'New Member',
'MailRegBody'=>'New Member Registered !',
'headers' => 'From: Yourmail@you.com' . "\r\n" .'Reply-To: Yourmail@you.com' . "\r\n" .'X-Mailer: PHP/' . phpversion();
);


جسارت کردم و اون کد رو حذف کردم ، بعد از حذف کد ثبت نام انجام میگیره اما باز هم با این پیغام :

Warning: array_walk() [function.array-walk]: The argument should be an array in C:\Program Files\EasyPHP 3.0\www\sc\config.php on line 26
Registeration was successfull! now login!
Notice: Undefined variable: info in C:\Program Files\EasyPHP 3.0\www\sc\signup.php on line 15

---------- Post added at 01:00 PM ---------- Previous post was at 12:58 PM ----------


سمي كالن بعد از تابع phpversion() اضافه هستش واسه همين ارور parse ميده

ممنون ، اون رو هم حذف کردم اما باز این ارور رو داد :

Notice: Use of undefined constant phpversion - assumed 'phpversion' in C:\Program Files\EasyPHP 3.0\www\sc\config.php on line 8

Warning: array_walk() [function.array-walk]: The argument should be an array in C:\Program Files\EasyPHP 3.0\www\sc\config.php on line 32
Registeration was successfull! now login!
Notice: Undefined variable: info in C:\Program Files\EasyPHP 3.0\www\sc\signup.php on line 15

Rezash
January 3rd, 2011, 12:57
اينو تست كنيد :


<?php
$config = array(
'AdminEmail'=>'Yourmail@you.com',
'SendMailonreg'=>true,
'MailRegSubject'=>'New Member',
'MailRegBody'=>'New Member Registered !',
'headers' => 'From: Yourmail@you.com' . "\r\n" .'Reply-To: Yourmail@you.com' . "\r\n" .'X-Mailer: PHP/' . @phpversion(),
);
//db connection
$server = 'localhost';
$username = 'root';
$password = 'mysql';
$database = 'mysql';
$Connection = mysql_connect( $server , $username , $password ) or die(mysql_error());
mysql_select_db( $database , $Connection ) or die(mysql_error());
//data filtering
function safe( $value ){
$value = trim( $value );
$value = mysql_real_escape_string( $value );
$value = htmlspecialchars($value);
$value = strip_tags($value);
$value = str_replace(array("<",">","'","ي","&amp;","?"),array("&lt;","&gt;","'","ي","&","ي"),$value);
return $value;
}
function autosafe(&$value,$key){
$value = safe($value);
return $value;
}
if(is_array($_POST))
array_walk($_POST,'autosafe');
if(is_array($_GET))
array_walk($_GET,'autosafe');
if(is_array($_COOKIE))
array_walk($_COOKIE,'autosafe');
if(is_array($_SESSION))
array_walk($_SESSION,'autosafe');

?>

alisc
January 3rd, 2011, 18:08
اينو تست كنيد :


<?php
$config = array(
'AdminEmail'=>'Yourmail@you.com',
'SendMailonreg'=>true,
'MailRegSubject'=>'New Member',
'MailRegBody'=>'New Member Registered !',
'headers' => 'From: Yourmail@you.com' . "\r\n" .'Reply-To: Yourmail@you.com' . "\r\n" .'X-Mailer: PHP/' . @phpversion(),
);
//db connection
$server = 'localhost';
$username = 'root';
$password = 'mysql';
$database = 'mysql';
$Connection = mysql_connect( $server , $username , $password ) or die(mysql_error());
mysql_select_db( $database , $Connection ) or die(mysql_error());
//data filtering
function safe( $value ){
$value = trim( $value );
$value = mysql_real_escape_string( $value );
$value = htmlspecialchars($value);
$value = strip_tags($value);
$value = str_replace(array("<",">","'","ي","&amp;","?"),array("&lt;","&gt;","'","ي","&","ي"),$value);
return $value;
}
function autosafe(&$value,$key){
$value = safe($value);
return $value;
}
if(is_array($_POST))
array_walk($_POST,'autosafe');
if(is_array($_GET))
array_walk($_GET,'autosafe');
if(is_array($_COOKIE))
array_walk($_COOKIE,'autosafe');
if(is_array($_SESSION))
array_walk($_SESSION,'autosafe');

?>


ممنون ولی با این کد هم ارور زیر رو میده :

Notice: Undefined variable: _SESSION in C:\Program Files\EasyPHP 3.0\www\sc\config.php on line 35
Unknown column 'pass' in 'field list'

Rezash
January 3rd, 2011, 18:25
اگر session_start زده باشيد نبايد اين خطا رو بده
بهرحال :

if(isset($_SESSION))
if(is_array($_SESSION))
array_walk($_SESSION,'autosafe');

alavi71
January 3rd, 2011, 18:46
خيلي جالب و اموزنده بود

alisc
January 4th, 2011, 12:01
اگر session_start زده باشيد نبايد اين خطا رو بده
بهرحال :

if(isset($_SESSION))
if(is_array($_SESSION))
array_walk($_SESSION,'autosafe');

این رو کجا باید بزنیم ؟

Rezash
January 4th, 2011, 12:16
به جاي 2 خط زير :

if(is_array($_SESSION))
array_walk($_SESSION,'autosafe');

alisc
January 5th, 2011, 10:54
Rezash عزیز ، ممنون میرم تست کنم :)
راجع به امن کردن این اسکریپت کی توضیح میدی ؟؟؟

teamnet
January 5th, 2011, 14:34
آقا ادامش چی شد ؟

Rezash
January 11th, 2011, 23:07
سلام
پيوست جديد :
تغييرات :
- جلوگيري از ثبت نام هاي كاربري تكرار (فايل signup.php)
- ايجاد يك ليست از كرابران ثبت نام شده و صفحه بندي
* توضيحات صفحه بندي رو قبلا اينجا دادم :
http://www.webhostingtalk.ir/f148/19031/
اما بزودي كاملتر با توجه به مثال همين برنامه در همين تاپيك ميذارمش.

alisc
January 16th, 2011, 17:49
با تشکر از Rezash عزیز ، که این آموزش خوب و مفید کاربردی رو ایجاد کردند و ادامه میدند .

چند سوال :

رضا جان ، چه جوری میشه یه کاری کرد که فقط Admin سایت بتونه صفحه Users.php رو ببینه ؟؟؟؟ ( یعنی یوزرنیم و پسوورد بده و بتونه اون صفحه رو ببینه ؟ )
یعنی در کل دیتابیس یه کمی تخصصی تر بشه ، دو نوع اعضا باشه : 1. مدیر 2. کاربر . همچین چیزی میشه ؟

میشه کاری کرد از صفحه Users.php نام کاربران به صورت لینک باشه ؟؟؟ ( یعنی بشه کاربر رو ادیت کرد ، نام اون رو عوض کرد ، پسوورد عوض کرد و . . . )


راجع به امنیت کی صحبت می کنید .

با تشکر فراوان

---------- Post added at 06:49 PM ---------- Previous post was at 06:46 PM ----------

یه سوال خیلی خیلی خفن هم بپرسم : آیا میشه کاری کرد که آخرین تاریخ ورود کاربر رو روبه روی نام کاربریش بنویسه ؟ ( هم در صفحه User.php و هم در صفحه Login.php )

aghaee
January 29th, 2011, 21:51
سلام
آقا قرار بود یه فایل برای ویرایش کاربران باشه؟ نیست

یعنی یه فایل باشه که بشه ویرایش روی اطلاعات باشه و ...

هدفم یادگیری آپدیت داده ها در sql هست
با تشکر

Rezash
January 29th, 2011, 22:13
سلام
آقا قرار بود یه فایل برای ویرایش کاربران باشه؟ نیست

یعنی یه فایل باشه که بشه ویرایش روی اطلاعات باشه و ...

هدفم یادگیری آپدیت داده ها در sql هست
با تشکر
سلام
چشم دوستان
بزودي update و مي گم + پنل مديريت كاربران و بخش هايي كه وعده داده بودم.
پس فردا آخرين امتحانم رو بدم يك سري تصميمات و اقدامات ويژه براي اين تاپيك و كلا بخش php دارم.لطفا صبر كنيد.

aghaee
January 29th, 2011, 22:22
سلام
چشم دوستان
بزودي update و مي گم + پنل مديريت كاربران و بخش هايي كه وعده داده بودم.
پس فردا آخرين امتحانم رو بدم يك سري تصميمات و اقدامات ويژه براي اين تاپيك و كلا بخش php دارم.لطفا صبر كنيد.

داداش ممنون ازت
میشه بخش ویرایش به فیلد رو توی دیتابیس برای امشب بگی؟؟ اخه خیلی بهش نیاز دارم

ممنون میشم

Rezash
January 29th, 2011, 22:37
داداش ممنون ازت
میشه بخش ویرایش به فیلد رو توی دیتابیس برای امشب بگی؟؟ اخه خیلی بهش نیاز دارم

ممنون میشم



$q = mysql_query("UPDATE `table_name` SET `field1`='value1',`field2` = 'test' WHERE `somefield`='sth' LIMIT 10");

UPDATE : بروز كردن
table_name : نام جدول ما كه قصد آپديت داريم
field1 و field2 فيلدهايي كه قصد داريم آپديت كنيم رو با ويرگول از هم جدا مي كنيم.
WHERE : فيلدهاي منتخب از چه ركوردهايي بروز بشند ؟
اگر WHERE نذاريم تمام فيلدها ويرايش ميشند.
و ميتونيم با AND و OR مشخص كنيم مثلا ركوردي كه اسم طرف علي هست يا فاميلش تست است رو ويرايش كنيم.
LIMIT : محدود كردن اينكه حداثكر چند ركورد ويرايش بشه در اين مثال 10 رو فرض كردم مثلا ده ركوردي كه در اين شرايط صدق مي كنند بروز بشند.

aghaee
January 29th, 2011, 22:49
برای این مثال جدول یوزرمون میشه با فایل مثال بزنید، چون از اول این بخش یوزر ها رو دنبال کردم، بهتر می شه متوجه شد

واقعا ممنوووووووون

Rezash
January 29th, 2011, 23:13
برای این مثال جدول یوزرمون میشه با فایل مثال بزنید، چون از اول این بخش یوزر ها رو دنبال کردم، بهتر می شه متوجه شد

واقعا ممنوووووووون
خواهش مي كنم
در اين مثال اگر كاربر لوگين كرد باشه ميتونه با مراجعه به آدرس
script.php?name=ali
نام خودش رو بروز كنه


<?php
session_start();
if(!isset($_SESSION['username']) OR !isset($_SESSION['client']))
die('Please Login/register');
$client = md5($_SERVER['REMOTE_ADDR'].$_SERVER['HTTP_USER_AGENT'].$_SERVER['SERVER_NAME']);
if($client != $_SESSION['client'])
die("Dear User ! Your Login session expired,please re login");

if(isset($_GET['name']))
die('please select new name ! ');
include('config.php');
$newname = $_GET['name'];
$username = $_SESSION['username'];
$query = "UPDATE `user` SET `name`='$newname' WHERE `user`='$username' LIMIT 1";
$mysql_q = mysql_query($query) or die(mysql_error());
if(mysql_num_rows($mysql_q) <= 0)
die('Unable to proccess');
echo "Profile Updated !";
?>

aghaee
February 1st, 2011, 09:02
یکی درست کردم کار می کنه ولی وقتی where رو اضافه می کنم خطا میده، یعنی هیچ رکوری ویرایش نمی شه

ولی وقتی بدون where میزارم همه رکورد ها ویرایش میشه
ممنون میشم راهنمایی کنید

Rezash
February 2nd, 2011, 10:36
یکی درست کردم کار می کنه ولی وقتی where رو اضافه می کنم خطا میده، یعنی هیچ رکوری ویرایش نمی شه

ولی وقتی بدون where میزارم همه رکورد ها ویرایش میشه
ممنون میشم راهنمایی کنید

كوئري و خطا رو كپي كنيد لطفا.

patteerr
February 4th, 2011, 19:43
ممنونم دوست عزیز . بسیار مفید بود . باز هم ادامه بدین آموزشهایتون رو .

aghaee
February 11th, 2011, 23:42
من این قسمت رو کاملا یاد گرفتم؛ حالا توی این اسکریپت مشکل امنیتی وجود نداره که؟؟؟؟؟ کاملا امنه من این روش رو توی اسکریپت هام به کار ببرم؟؟؟

Rezash
February 13th, 2011, 01:29
من این قسمت رو کاملا یاد گرفتم؛ حالا توی این اسکریپت مشکل امنیتی وجود نداره که؟؟؟؟؟ کاملا امنه من این روش رو توی اسکریپت هام به کار ببرم؟؟؟

سلام
روي مفاهيم پايه وقت گذاشتيم .
الان شروع به نوشتن متن مقاله بعدي كردم كه صرفا در مورد مسائل امنيتي در برنامه نويسي php هست كه فكر كنم تا دو روز ديگه بخش اولش تموم بشه + دو تيكه فيلم آموزشي در مورد امنيت
بعد از اينكه كمي در مورد امنيت بحث كرديم دوباره روي ساير امكانات اين آموزش مانور ميديم.
دوستاني كه در تاپيك تشكر و نظر دادند واقعا ممنونم ، ولي با اين شرايط مديريت و جدا سازي محتواي آموزشي كمي سخت و زمان بر شده ...
لطفا براي تشكر فقط از دكمه تشكر استفاده كنيد و پست نديد.
سپاس

sm_pakdel
March 30th, 2011, 17:33
اگر لطف کنید و با دیتابیس رو آموزش بدید یا یه پروژه عملی رو انجام بدید خیلی عالی میشه
اگر مثل تاپیک آموزش پی اچ پی بتونید کار کنید که واقعا عالیه
از زحماتتون ممنون

mirhendi
October 30th, 2011, 12:05
salam mishe yeki amadeh in cod ra bram befrese

aloche
January 29th, 2012, 14:30
سلام من یه login نوشتم برا سایتم و دیتابیس هم درست کردم ولی error میده

<?phpsession_start();$name=$_POST['user'];$pass=$_POST['pass'];require('config/config.php');mysql_query("set names 'UTF8' ");if(empty($_POST['user']) && empty($_POST['pass'])){echo "<strong><h4><b>*** لطفا نــام کــاربــری و رمــز عـبـور خـود را وارد نــمــایــیــد *** </b><br/></h4></strong>";}else {mysql_select_db("login",$connect);$query = "SELECT * FROM `users` WHERE `username` = '".$name."' AND `password` = '".$pass."'";$result=mysql_query($query)or die(mysql_error());$num=mysql_num_rows($result);if ($num > 0) { header ('location: user/user1.php'); }
else { echo " <strong><h4><b>*** نـــام کـــاربـــری یا رمــــز عــبــور اشــتــبــاه اســـت *** </b><br/></h4></strong>."; }


error این دو خط رو میده

$name=$_POST['user'];
$pass=$_POST['pass'];

من textfild هم گذاشتم و دیتابیسم هم درسته ولی نمی دونم چرا خطا میده
میشه کمکم کنید

:77:

---------- Post added at 02:30 PM ---------- Previous post was at 02:27 PM ----------






<?php $page =basename($_SERVER['PHP_SELF']); $timestampInSeconds = $_SERVER['REQUEST_TIME']; $mySqlDateTime= date("Y-m-d H:i:s", $timestampInSeconds); $sql = 'INSERT INTO count(`id`, `page`, `Date`, `IP`) VALUES (NULL, \''.$page.'\',\''.$mySqlDateTime.'\', \''.$_SERVER['REMOTE_ADDR'].'\');'; mysql_query($sql); $todayDate= date("Y-m-d", $timestampInSeconds); $yesterdayDate= date("Ymd", strtotime("-1 day")); $query='SELECT COUNT( * ) total FROM count'; $result = mysql_query($query); $row = mysql_fetch_array($result, MYSQL_NUM); $count = $row[0]+1135; $query='SELECT count(distinct IP) FROM count where date=\''.$yesterdayDate.'\''; $result = mysql_query($query); $row = mysql_fetch_array($result, MYSQL_NUM); $count_yest = $row[0]+34; $query='SELECT count(distinct IP) FROM count where Date=\''.$todayDate.'\''; $result = mysql_query($query); $row = mysql_fetch_array($result, MYSQL_NUM); $count_today = $row[0]+45;echo "<h5> بازدید امروز : $count_today نفر </h5>","<h5> بازدید دیروز : $count_yest نفر </h5>" ,"<h5> کل بازدیدها : $count نفر </h5>"; ?>






این کد آمارگیر هست از یه سایت گرفتم ولی متغییراش چیزی رو اضافه نمی کنن
یک عدد ثابت همیشه نشون میده
میشه بگید مشکلش چیه ؟
ممنون

:77:

_omid_
March 22nd, 2012, 00:47
salam mishe yeki amadeh in cod ra bram befrese

با درود
دوست عزیز فینگلیش تایپ نکنین. لطفا قوانین سایت مرور بفرمایید
با تشکر

chakavak.dana
July 18th, 2012, 01:10
سلام من نام کاربری و رمز عبور صفحه 6 را دانلود کردم و اجرا
هنگام ورود اگه نام کاربری و یا رمز عبور وارد نکنم بدون خطا وارد میشه به صفحه خوش آمد گویی و حتی اگه یکیش هم خالی باشه باز وارد می شه کلا خطا نمی ده
رمز عبور پس برای چه کاری وارد می کنیم نمی دونم تازه امنیت که بماند
شاید من بد کپی می کنم آخه همه صفحات رو که تو یه پروژه می زارم اجرا می کنم پیغام می ده لوگین کنید چیزی هم قابل مشاهده نیست
به همین دلیل من از لینک به لاگین استفاده کردم اشتباهه؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟ ؟
لطفا جوابمو بدید؟؟؟؟؟؟؟؟

aliarkhodi
July 22nd, 2012, 21:59
سلام
ابتدا از شما یک تشکر ویژه دارم برای این همه زحمتی که کشیدید و دانشتون رو بدون هی چشم داشتی در اختبار دیگران گذاشتید
منم مشکل این دوست مون رو دارم
فایل ها رو کپی کردم یک جا توی کانفیگ مشکل داشت که برطرف کردم
اما الان اگر رمز رو وارد نکنی وارد صفحه اینکس میشه و سشن رو هم میسازه
من به همون شرط ست شدن شرط خالی نبودن رو هم اضاله کردم درست شد ولی نمی دونم کارم درست بوده یا نه
ضمنا من یه سفارش دارم اگر فرصت داشتید اطلاع بدید تا باهاتون تماس بگیرم

aliarkhodi
July 22nd, 2012, 22:05
سلام
ابتدا از شما یک تشکر ویژه دارم برای این همه زحمتی که کشیدید و دانشتون رو بدون هی چشم داشتی در اختبار دیگران گذاشتید
منم مشکل این دوست مون رو دارم
فایل ها رو کپی کردم یک جا توی کانفیگ مشکل داشت که برطرف کردم
اما الان اگر رمز رو وارد نکنی وارد صفحه اینکس میشه و سشن رو هم میسازه
من به همون شرط ست شدن شرط خالی نبودن رو هم اضاله کردم درست شد ولی نمی دونم کارم درست بوده یا نه
ضمنا من یه سفارش دارم اگر فرصت داشتید اطلاع بدید تا باهاتون تماس بگیرم

chakavak.dana
July 22nd, 2012, 23:20
سلام
من پروژه این ترم سایت باید تحویل می دادم
من شرط خالی بودن رو امتحان کردم همون شرطی که در کد های عضویت وجود داره ولی هر جای کدم که می زارم
درست می شه یعنی خالی باشه دیگه خطا میده
ولی رمز عبور و نام کاربری و چک نمی کنه
اگه می شه کد لاگینتون رو برام بزارین
تورو خدا زودتر جواب بدین من باید فردا سایتم ایمیل کنم(:|
ممنون

Rezash
July 23rd, 2012, 10:02
سلام
مشکل login رو حل کردم. فایل پیوست رو دانلود کنید. :53:7319

chakavak.dana
July 23rd, 2012, 10:12
سلام خیلی ممنون لطف کردین
یه درخواست کوچولوی دیگه هم دارم همه آموزش های تصویری خودتون رو کدهاش رو هم برای دانلود برای ما پیوست کنید
چون ما می تونیم کد درست رو از شما بگیریم و در برنامه امتحان کنیم و نیازی به تایپ دوباره کدها به صورت دستی نیست
وقت کمتری صرف می شه می تونیم مطالب بیشتری از سایت خوبتون یاد بگیریم
توضیح دادن شما به صورت کد و توضیح کد تصویری خیلی عالی تره
بازم ممنون

aliarkhodi
August 12th, 2012, 02:20
این تاپیک به کما رفته ؟

ston
January 29th, 2013, 13:10
این که با سورس گرفتن میشه رمز و یوزر را فهمید :106::64:

cooper47
July 21st, 2013, 22:02
در مورد SQL INJECTION :
در آخرين فايلي كه براي دانلود گذاشتم :
فايل config.php رو ببينيد :


function safe( $value ){
$value = trim( $value );
$value = mysql_real_escape_string( $value );
$value = htmlspecialchars($value);
$value = strip_tags($value);
$value = str_replace(array("<",">","'","ی","&amp;","ۜ"),array("&lt;","&gt;","'","ي","&","ي"),$value);
return $value;
}
function autosafe(&$value,$key){
$value = safe($value);
return $value;
}
array_walk($_POST,'autosafe');
array_walk($_GET,'autosafe');
array_walk($_COOKIE,'autosafe');
array_walk($_SESSION,'autosafe');

تابع safe:
ابتدا مقدار ورودي رو trim مي كنيم يعني فضاهاي خالي اول و آخرش رو حذف مي كنيم
mysql_real_escape_string : يك تابع فوق العاده سودمند براي حذف كاراكتر هاي ناخواسته و آماده سازي رشته ورودي براي استفاده در يك كوئري به صورت سالم . مثلا كاراكترهاي \x00, \n, \r, \, ', " and \x1a فيلتر ميشوند.
PHP: mysql_real_escape_string - Manual (http://php.net/manual/en/function.mysql-real-escape-string.php)
htmlspecialchars
تبديل كاراكترهاي html :
مثال :

* '&' (ampersand) becomes '&amp;'
* '"' (double quote) becomes '&quot;' when ENT_NOQUOTES is not set.
* ''' (single quote) becomes ''' only when ENT_QUOTES is set.
* '<' (less than) becomes '&lt;'
* '>' (greater than) becomes '&gt;'
PHP: htmlspecialchars - Manual (http://php.net/manual/en/function.htmlspecialchars.php)
strip_tags :
حذف تگ ها ، مثلا تگ اسكريپت و ...
PHP: strip_tags - Manual (http://php.net/manual/en/function.strip-tags.php)
تابع autosafe :
تابعي دست نويس براي اجراي خودكار تابع safe روي متغير هاي ورودي . اگر از نحوه كاركرد اين تابع و تابع بعدي يعني array_walk اطلاع نداريد توصيه ميكنم "آرايه ها در php" رو كه قبلا در همين انجمن نوشتم مطالعه كنيد.
-
جلوگيري و مقابله با جعل سشن :


$client = md5($_SERVER['REMOTE_ADDR'].$_SERVER['HTTP_USER_AGENT'].$_SERVER['SERVER_NAME']);
$_SESSION['client'] = $client;

يك راه كاملا ساده !
در كد بالا من تركيبي از آي پي كاربر ، مشخصات مرورگر كاربر و آدرس سايت رو در يك رشته تركيب و md5 كردم و داخل يك سشن ريختم
حالا در صفحات لوگين بايد چك كنم :


$client = md5($_SERVER['REMOTE_ADDR'].$_SERVER['HTTP_USER_AGENT'].$_SERVER['SERVER_NAME']);
if($client != $_SESSION['client'])
die("Dear User ! Your Login session expired,please re login");

با اينكار حتي اگه سشن يك يوزر جعل و د.زديده بشه باز هم هويتش جعل نميشه.
سعي كردم خلاصه بگم و بيشتر توابع رو php.ini ارجاع مي دم به دو دليل : 1. شلوغ نشدن غير ضروري تاپيك 2. درك سايت فوق العاده مفيد php.net
منتظر ادامه آموزش ها باشيد :53:


سلام دوست عزیز

لطفا هشدار سایت php رو برای تابع mysql_real_escape_string جدی بگیرید


Caution Security: the default character set The character set must be set either at the server level, or with the API function mysql_set_charset() (http://www.php.net/manual/en/function.mysql-set-charset.php) for it to affect mysql_real_escape_string(). See the concepts section on character sets (http://www.php.net/manual/en/mysqlinfo.concepts.charset.php) for more information.



قبل از ست کردن charset لطفا ازین تابع استفاده نکنید

tarenoco
January 15th, 2014, 15:15
من تو این کار به مشکل خوردم کار نمیکنه

tarenoco
January 25th, 2014, 15:11
من تو یه سایت html برای کاربرا یه قسمت گذاشتم که هر کس برای اینکه بتونه مدت زمان استفاده از اکانتش رو ببینه گذاشتم
الان می خوام براش عضویت هم براش بدارم اگه میشه کمک کنید

mahdikhanzadi
May 31st, 2016, 21:32
خواهش مي كنم
اتفاقا قصد همين كار رو دارم ، فرصت كنم ادامه آموزش رو مي نويسم و در آخر فايل ها + ساختار جدول رو مي ذارم.
سلام دوست عزیز من امروز یه اسکریپت برای عضویت و لاگین یوزرها نوشتم که قابلیت های زیر رو داره:



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


برای دانلود این اسکریپت میتونید از لینک زیر اقدام کنید.
http://www.tarhche.ir/%D8%A7%D8%B3%DA%A9%D8%B1%DB%8C%D9%BE%D8%AA-%D8%B9%D8%B6%D9%88%DB%8C%D8%AA-%DA%A9%D8%A7%D8%B1%D8%A8%D8%B1%D8%A7%D9%86-%D8%A8%D8%A7-%D8%A7%D8%B3%D8%AA%D9%81%D8%A7%D8%AF%D9%87-%D8%A7%D8%B2-php/
توضیحاتشم در لینک بالا هست. موفق باشید.

- - - Updated - - -

سلام دوست عزیز به لینک زیر سه سر بزنید
http://www.tarhche.ir/%D8%A7%D8%B3%DA%A9%D8%B1%DB%8C%D9%BE%D8%AA-%D8%B9%D8%B6%D9%88%DB%8C%D8%AA-%DA%A9%D8%A7%D8%B1%D8%A8%D8%B1%D8%A7%D9%86-%D8%A8%D8%A7-%D8%A7%D8%B3%D8%AA%D9%81%D8%A7%D8%AF%D9%87-%D8%A7%D8%B2-php/