article

هوشمند سازی پنل ورود و خروج سایت

mysql-php-smart-login

در مطالب قبلی از بخش آموزش کاربردی کار با php و mysql، به طور مفصل به مبحث ساخت فرم عضویت و ورود و خروج کاربران پرداختیم، بحث نشست ها یا سشن (session) را با هم مرور کرده و با نحوه رمزنگاری کلمه عبور و همچنین ذخیره و بازیابی اطلاعات اعضاء سایت آشنا شدیم، این بار در تکمیل آموزش های قبلی، می خواهیم کمی بخش مدیریت سایتمان را توسعه داده و آن را به اصطلاح هوشمندتر کنیم، در این مطلب خواهیم دید که چگونه می توان امکاناتی مانند "مرا به خاطر بسپار" و  خروج خودکار بعد از چند دقیقه غیر فعال بودن را در پنل سایت خود افزود.

ایجاد امکان "مرا به خاطر داشته باش" در پنل سایت


حتما سایت های زیادی را دیده اید که در هنگام ورود اطلاعات نام کاربری و کلمه عبور، معمولا به صورت یک چک باکس، امکانی تحت عنوان "مرا به خاطر داشته باش" یا عباراتی از این دست دارند، این امکان در واقع به این معنی است که سیستم تا مدت زمان معینی از شما در مراجعات بعدی نام کاربری و کلمه عبور نخواهد خواست و به صورت هوشمندانه ای شما را به یاد خواهد داشت، اما این امکان چگونه ایجاد می شود؟
این امکان به این صورت کار می کند: هنگامی که گزینه مورد نظر را انتخاب می کنید، برنامه یک کوکی (ckookie) در مرورگر شما ایجاد کرده و متناسب با آن کوکی، در سرور، متغیرهای سشن را برای مدت زمانی که برنامه نویس تعیین کرده است (به فرض یک ماه) نگهداری می کند، تا زمانی که سشن های مورد نظر در سرور وجود دارند و به طور مثال به دلیل منقضی شدن تاریخ کوکی یا کلیک کاربر بر روی دکمه خروج، unset نشده و از بین نرفته اند، کاربر برای سرور قابل شناسایی است و بدون ورود نام کاربری و کلمه عبور، حتی با بستن پنجره مرورگر و مراجعه بعدی، می تواند از امکانات بخش اعضاء استفاده نماید، برای ایجاد این امکان در php ابتدا به فرمی که در آموزش قبل ساخته ایم یک چک باکس اضافه می کنیم (اگر آموزش قبلی را مطالعه نکرده اید، می توانید در انتهای این مطلب، از دکمه مربوط به مطالب قبلی و بعدی استفاده نمایید).
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>وبگو | پنل ورود و خروج در سایت با php و mysql</title>
<!-- https://webgoo.ir -->
<style type="text/css">
body{
    font-family:Tahoma, Geneva, sans-serif;
    direction:rtl;
    font-size:12px;
}
</style>
</head>
<body>
<form action="login.php" method="post">
<label for="user">نام کاربری:</label><br />
<input name="username" id="user" type="text" maxlength="255" /><br /><br />
<label for="pass">کلمه عبور:</label><br />
<input name="password" id="pass" type="password" maxlength="255" /><br /><br />
<label for="remember">مرا به خاطر بسپار:</label>
<input type="checkbox" name="remember" id="remember" checked="checked" value="1" /><br /><br />
<input type="hidden" name="check" value="sended" />
<input type="submit" value="ورود" />
</form>
</body>
</html>
توضیح:
- همان طور که ملاحظه می کنید؛ چک باکس ما در فرم بالا از نوع  input و checkbox است.
- برای اینکه به طور پیش فرض، چاک باکس فعال بوده و به حالت انتخاب شده درآمده باشد، بخش checked را اضافه می کنیم، اگر مایل هستید که به طور پیش فرض، (تیک) چک باکس غیر فعال باشد، این قسمت را حذف کنید.
- مقادیر value برای فرم بالا و قسمت چک باکس که عدد یک در نظر گرفته شده، فرضی است، شما می توانید مقادیر دیگری مثل true، ok و... در نظر بگیرید، اما نکته مهم این است که ما این مقادیر را در سمت سرور و در کد php خود به عنوان یک متغیر از فرم html دریافت خواهیم کرد تا از انتخاب شدن یا نشدن این گزینه توسط کاربر اطمینان حاصل کنیم.
اکنون در سمت سرور کد php با نام فرضی login.php را که در آموزش پیشین ساختیم، به صورت زیر ویرایش می کنیم.
<?php
//شروع یک نشست
session_start();
//دریافت و تنظیم متغیرهای ارسال شده توسط کاربر
@$username = $_POST['username'];
@$password = $_POST['password'];
@$check = $_POST['check'];
$check_error = 0;
//بررسی معتبر بودن اطلاعات ارسالی کاربر
//نام کاربری
if (!isset($username) || $username == ''){
    echo "فیلد نام کاربری نباید خالی باشد!";
    $check_error = 1;
}
//کلمه عبور
elseif (!isset($password) || $password == ''){
    echo "فیلد کلمه عبور نباید خالی باشد!";
    $check_error = 1;
}
//اطلاعات اتصال به پایگاه داده
$con = mysql_connect("localhost", "user", "pass")
or die(mysql_error());   
//نام دیتابیس
mysql_select_db("db", $con)
or die(mysql_error());
//جلوگیری از نفوذ به دیتابیس
$username = mysql_real_escape_string($username);
$password = md5($password);
if ($check_error != 1 && $check == 'sended'){
    //تطبیق اطلاعات کاربر با آنچه که در دیتابیس ذخیره شده
    $result = mysql_query ("SELECT * FROM register WHERE username = '$username' AND password = '$password'");
    // تعداد ردیف های موجود
    $count = mysql_num_rows($result);
    if($count > 0){
        // اطلاعات کاربر درست است، تنظیم مجوز های استفاده از بخش اعضاء
        $_SESSION['username'] = $_POST['username'];
        $_SESSION['password'] = $_POST['password'];
        $_SESSION['remember'] = $_POST['remember'];
        // اطلاعات کاربر صحیح است، انتقال به صفحه اعضاء
        header("location:user.php");
    }
    else{
        // اطلاعات کاربر صحیح نیست
        echo "Error!<br />";
    }
}
//پایان ارتباط با پایگاه داده  
mysql_close($con);
?>
توضیح:
- در این فایل ما سشن remember را به کد خود افزوده ایم که مقادیر آن در واقع همان مقادیر چک باکس خواهد بود.
$_SESSION['remember'] = $_POST['remember'];
به این صورت، اگر کاربر تیک "مرا به خاطر داشته باش" را غیر فعال نکرده باشد، مقدرا آن 1 و در غیر این صورت مقدار آن خالی خواهد بود.
- به دلیل اینکه در اینجا ما از تابع header و در ادامه از تابع setcookie استفاده می کنیم، باید هیچ نوع خروجی html و حتی فضای خالی یا کاراکترهای نامرئی (byte order mark یا BOM) پیش از فراخوانی آنها از طریق مرورگر ارسال نکنیم، در غیر این صورت با پیغام خطای headers already sent مواجه خواهیم شد، از این رو در کد خود، مقادیر کدهای html را حذف کرده ایم و در عوض با ایجاد یک انتقال از طریق header و location، کاربر را به طور خودکار به صفحه دیگر منتقل می کنیم.
حال نوبت به مقایسه مقادیر چک باکس و تنظیم یا عدم تنظیم کوکی است؛ لذا پس از انتقال کاربر به فایل user.php که در واقع محیط کاربری اعضای سایت است، مقادیر سشن remember را که پیش تر با دریافت اطلاعات فرم ورود تنظیم کرده ایم، بررسی می کنیم، اگر مقدار آن 1 بود، پس کاربر تمایل دارد که اطلاعاتش به خاطر سپرده شود، لذا کوکی را تنظیم می کنیم، اگر غیر از این بود، یعنی نباید کوکی یادآوری کاربر تنظیم شود.
<?php
//شروع یک نشست
session_start();
//بررسی تنظیم شدن یا نشدن متغیرهای سشن
if (!isset($_SESSION['username']) || !isset($_SESSION['password'])){
//در صورتی که متغیرهای سشن تنظیم نشده باشند، کاربر مجاز به دیدن ادامه صفحه نیست و او را به صفحه اصلی منتقل می کنیم
header("location:index.php");
die();     
}
//بررسی امکان مرا به خاطر بسپار
elseif (isset($_SESSION['remember']) && $_SESSION['remember'] == '1'){
    $login_time=3600;//یک ساعت
    setcookie(session_name(),session_id(),time()+$login_time,("/"));
}
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>وبگو | محیط کاربری اعضای سایت</title>
<!-- https://webgoo.ir -->
<style type="text/css">
body{
    font-family:Tahoma, Geneva, sans-serif;
    direction:rtl;
    font-size:12px;
}
</style>
</head>
<body>
شما در حال استفاده از بخش کاربری سایت هستید!
</body>
</html>
توضیح:
- از تابع setcookie برای تمدید مهلت استفاده از بخش اعضاء برای یک بار ورود کاربر (با ایجاد یک کوکی ) استفاده می کنیم.
- تابع setcookie باید یک آرگومان به صورت زمان به ثانیه داشته باشد که نمایانگر مدت زمان فعال بودن کوکی است، به فرض برای یک ساعت مقادیر 3600 ثانیه یا برای یک ماه معادل 2592000 ثانیه، بدین منظور ما از تابع time با افزودن یک مقدار به آن استفاده کرده ایم.
- نام کوکی با پارامتر session_name و مقادیر آن با session_id ذخیره می شود، همچنین برای تعیین یک مسیر (path) ذخیره سازی اطلاعات کوکی، پارامتر آخر را اضافه می کنیم، با تنظیم آن به صورت "/"، کوکی برای تمام فولدرهای یک سرور قابل دسترسی خواهد بود، در صورت عدم استفاده از متغیر path به طور پیش فرض، کوکی فقط در دایرکتوری که آن را ایجاد کرده است قابل استفاده است، به فرض با تنظیم آن به صورت "/user/" کوکی فقط در این فولدر قابل استفاده است، از این رو بهتر است همواره از روش ذکر شده در مثال استفاده کنید.
توجه کنید که قابلیت "مرا به خاطر داشته باش" برای برنامه هایی که به امنیت بالایی احتیاج دارند، معمولا توصیه نمی شود، چرا که اگر کاربر به هر دلیل از سیستم به شکل استاندارد خارج نشود (به فرض پنجره مرورگر خود را ببندد یا برق به طور ناگهانی  قطع شود)، فردی دیگر بر روی همان سیستم (و همان مرورگر) می تواند بدون وارد کردن نام کاربری و کلمه عبور و تنها با داشتن آدرس url صفحه کاربری، وارد قسمت مدیریت شود، متاسفانه این مشکلی است که بیشتر از روی ناآگاهی و معمولا در کامپیوترهای اشتراکی مانند کافی نت ها اتفاق می افتد؛ لذا استفاده از این امکان باید با در نظر گرفتن هشدارها و نکات امنیتی صورت گیرد.

ایجاد امکان خروج خودکار بعد از مدت زمان عدم فعالیت


در مقابل امکان "مرا به خاطر داشته باش"، قابلیت دیگری را نیز می توان برای پنل مدیریت سایت در نظر گرفت که معمولا به دلیل وجود حساسیت های خاص و ارتقاء امنیت صورت می گیرد، این امکان ایجاد یک سیستم خودکار خروج است، یعنی اگر به فرض مدت زمانی کاربر بدون فعالیت در صفحه باقی بماند، نشست او خود به خود منقضی شود، در این حالت حتی در موقعی که پنجره مرورگر هنوز باز است، اعتبار کاربر در سرور به پایان می رسد و او باید مجددا در پنل سایت وارد شود، این امکان معمولا در سیستم هایی که جنبه امنیت برایشان از اهمیت بالایی برخوردار است (مانند سیستم تراکنش های بانکی و مالی، کنترل پنل هاست ها و...) به کار گرفته می شود.
برای افزودن این امکان به سیستم خود، ابتدا در فایل اصلی لاگین، یعنی login.php مقادیر زیر را در ابتدای کد اضافه کنید.
<?php
//زمان برای خروج خودکار کاربر
$now_time = time();
$_SESSION['time_started'] = $now_time;      
$_SESSION['time_remaining'] = 3600;
?>
به این صورت:
<?php
//شروع یک نشست
session_start();
//زمان برای خروج خودکار کاربر
$now_time = time();
$_SESSION['time_started'] = $now_time;      
$_SESSION['time_remaining'] = 3600;
//دریافت و تنظیم متغیرهای ارسال شده توسط کاربر
@$username = $_POST['username'];
@$password = $_POST['password'];
@$check = $_POST['check'];
$check_error = 0;
//بررسی معتبر بودن اطلاعات ارسالی کاربر
//نام کاربری
if (!isset($username) || $username == ''){
    echo "فیلد نام کاربری نباید خالی باشد!";
    $check_error = 1;
}
//کلمه عبور
elseif (!isset($password) || $password == ''){
    echo "فیلد کلمه عبور نباید خالی باشد!";
    $check_error = 1;
}
//اطلاعات اتصال به پایگاه داده
$con = mysql_connect("localhost", "user", "pass")
or die(mysql_error());   
//نام دیتابیس
mysql_select_db("db", $con)
or die(mysql_error());
//جلوگیری از نفوذ به دیتابیس
$username = mysql_real_escape_string($username);
$password = md5($password);
if ($check_error != 1 && $check == 'sended'){
    //تطبیق اطلاعات کاربر با آنچه که در دیتابیس ذخیره شده
    $result = mysql_query ("SELECT * FROM register WHERE username = '$username' AND password = '$password'");
    // تعداد ردیف های موجود
    $count = mysql_num_rows($result);
    if($count > 0){
        // اطلاعات کاربر درست است، تنظیم مجوز های استفاده از بخش اعضاء
        $_SESSION['username'] = $_POST['username'];
        $_SESSION['password'] = $_POST['password'];
        $_SESSION['remember'] = $_POST['remember'];
        // اطلاعات کاربر صحیح است، انتقال به صفحه اعضاء
        header("location:user.php");
    }
    else{
        // اطلاعات کاربر صحیح نیست
        echo "Error!<br />";
    }
}
//پایان ارتباط با پایگاه داده  
mysql_close($con);
?>
توضیح:
- در ابتدا ما زمان آخرین فعالیت کاربر را در متغیر now_time ذخیره می کنیم و آن را به سشن time_started نسبت می دهیم.
- سپس حداکثر زمان مجاز برای ماندن کاربر در صفحات (بدون رفرش کردن یا رفتن به صفحه دیگر) را  در سشن دیگر با نام time_remaining تنظیم می کنیم.
این اطلاعات به دلیل اینکه از نوع سشن هستند، در صفحات دیگر که در آنها نیز سشن را شروع می کنیم (با session_start)، قابل دسترسی می باشند، لذا پس از انتقال کاربر به صفحه user.php می توانیم حداکثر زمان مجاز را با زمان آخرین فعالیت او مقایسه کنیم، اگر اختلاف کم تر از صفر بود، پس کاربر زمانی ندارد و باید از نو وارد سیستم شود، در غیر این صورت حداکثر زمان او را برای به فرض 1 ساعت دیگر (3600 ثانیه) تمدید می کنیم، این کار را در ادامه انجام داده ایم.
<?php
//شروع یک نشست
session_start();
//بررسی تنظیم شدن یا نشدن متغیرهای سشن
if (!isset($_SESSION['username']) || !isset($_SESSION['password'])){
//در صورتی که متغیرهای سشن تنظیم نشده باشند، کاربر مجاز به دیدن ادامه صفحه نیست و او را به صفحه اصلی منتقل می کنیم
header("location:index.php");
die();     
}
//بررسی امکان مرا به خاطر بسپار
elseif (isset($_SESSION['remember']) && $_SESSION['remember'] == '1'){
    $login_time=3600;//یک ساعت
    setcookie(session_name(),session_id(),time()+$login_time,("/"));
}
//مقایسه زمان باقی مانده
$old_time = $_SESSION['time_started'];      
$new_time = time();     
$remain_time = $new_time - $old_time;      
$_SESSION['time_remaining'] = $_SESSION['time_remaining'] - $remain_time;      
if ($_SESSION['time_remaining'] > 0) {
    //تمدید مهلت
    $_SESSION['time_started'] = $new_time;     
}
else {
    //زمان کاربر به پایان رسیده است، انتقال به صفحه ورود
    header("location:index.php");      
}
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>وبگو | محیط کاربری اعضای سایت</title>
<!-- https://webgoo.ir -->
<style type="text/css">
body{
    font-family:Tahoma, Geneva, sans-serif;
    direction:rtl;
    font-size:12px;
}
</style>
</head>
<body>
شما در حال استفاده از بخش کاربری سایت هستید!
</body>
</html>
با کمی دقت در کد بالا و آشنایی با نحوه عملکرد سشن ها در php، به راحتی می توانید فعل و انفعالات صورت گرفته را در مثال بالا تفسیر کرده و با توجه به برنامه خود از آنها استفاده نمائید.
sectionدسته بندی: آموزش کاربردی » MySQL
related مطالب بیشتر:
» آموزش حذف گروهی اطلاعات از MySQL با استفاده از چک باکس
» نحوه رسم چارت و نمودار آماری با PHP و MySQL
» ساخت فید آر اس اس (RSS Feed) با استفاده از PHP و MySQL
» ایجاد لینک دانلود مدت دار با PHP و MySQL
» آموزش ساخت فرم عضویت در سایت با PHP و MySQL
commentنظرات (۷۰ یادداشت برای این مطلب ارسال شده است)
more یادداشت های جدید بر اساس تاریخ ارسال در انتهای یادداشت های موجود نمایش داده می شوند.
نویسنده: حامد
زمان: ۱۳:۴۲:۴۶ - تاریخ: ۱۳۹۵/۱۱/۰۱
باسلام و خسته نباشید
چگونه می توانم پنل کاربری هر کاربر را جداگانه تغییر بدم؟ یعنی اینکه هرکاربر بعد از لاگین به صفحه پروفایل خودش وارد میشود ( که تا اینجا مشکلی نیست) ولی میخوام فقط متن داخل پروفایل چند نفر بخصوص را تغییر دهم. از کجا باید اینکار را کنم؟
پاسخ: 
برای انجام این موارد باید تسلط کافی بر PHP و MySQL داشته باشید، در این صورت می توانید ساختار برنامه خود را طوری طراحی کنید که هر کاربر در دیتابیس یک نام کاربری منحصر به فرد داشته باشد، با استفاده از این نام کاربری و دستوراتی مانند SELECT، WHERE، UPDATE و... می توان صرفا ستون مربوط به او را انتخاب و تغییرات را بر همان اساس ذخیره کرد، قاعدتا ارائه تمام مقدمات و جزئیات در این قسمت ممکن نیست!
نویسنده: javad
زمان: ۱۱:۲۴:۲۸ - تاریخ: ۱۳۹۶/۰۳/۲۴
سلام
ممنون از سایت خوبتون
از کدهای مورد نظر بهترین استفاده رو کردیم بازم ممنون
فقط یه درخواستی داشتم میتونید یه کد زمان معکوس هم بدید که به این کدها متصل کنیم تا کاربر زمانی که برای استفاده از پنل داره رو ببینه؟
پاسخ: 
متاسفانه به لحاظ محدودیت های زمانی امکان ارائه کد آماده برای این مورد وجود ندارد، لطفا در وب عباراتی نظیر "js countdown date time" را جستجو کنید، نمونه هایی وجود دارد که می توانید با PHP آنها را ترکیب کنید.
نویسنده: سارا
زمان: ۱۸:۰۰:۵۳ - تاریخ: ۱۳۹۶/۰۷/۱۶
سلام ممنون از مطالب خوبتون
من این کدها رو نوشتم اول درست کار میکرد ولی الان خطای acces denid میده چه جوری مشکلو حل کنم ؟
ممنون میشم کمکم کنید
پاسخ: 
رفع اینگونه موارد نیاز به دسترسی به سورس کدها در هاست و آزمایش و خطا است.
نویسنده: سارا
زمان: ۱۳:۳۶:۴۶ - تاریخ: ۱۳۹۶/۰۷/۱۷
کدا رو براتون ارسال کردم
ممنون میشم از پاسختون
پاسخ: 
مشکل خاصی در کدها مشاهده نمی شود، همانطور که در پاسخ قبل گفتیم، کدها باید در هاست شما تست و خطایابی شوند، ممکن است ایراد از موارد دیگری باشد.
نویسنده: Serjik
زمان: ۱۱:۵۷:۳۴ - تاریخ: ۱۳۹۷/۰۳/۱۵
سلام خسته نباشید
برای اینکه اگه یک کاربر وارد پنل شد و باز هم از یک دستگاه دیگر وارد شد به طور خودکار از جایی که اول وارد شده خارج بشه باید چی کار کنم ... ممنون ازتون
پاسخ: 
در حالت عادی با تغییر اطلاعات مربوط به نشست کاربر در دیتابیس عملا سایر نشست ها منقضی می شوند و به محض درخواست آدرس جدید در پنل دسترسی کاربر مسدود می شود، اما اگر منظور بسته شدن خودکار صفحه است می توانیم برای این منظور یک کد Ajax بنویسیم که وضعیت معتبر بودن نشست را به فرض هر یک دقیقه با فراخوانی فایل PHP کنترل کند، اگر سشن آی دی با دیتابیس تطبیق نداشت با دستورات header در PHP کاربر را از پنل خارج می کنیم.
نویسنده: اشکان
زمان: ۰۵:۴۲:۲۱ - تاریخ: ۱۳۹۷/۰۳/۲۹
سلام خسته نباشید
می خواستم بدونم یک season خود به خود از بین می ره؟ یعنی اگه کاربر بدون اینکه loguot کنه صفحه رو ببنده season بسته می شه؟ و سوال دوم اینکه اگه season رو باز بمونه به این معنیه که در سرور season باز مونده و شخص دیگری در نقطه دیگری می تونه بره توی کاربری نفر قبلی؟
ممنون از سایت خوبتون
پاسخ: 
در کل مدیریت نشست ها در وب در دو قسمت مرتبط با هم صورت می گیرد: سشن و کوکی.
سشن معمولا برای هر نشست یک فایل با مقادیر تصادفی در سرور ایجاد می کند که از دید کاربران مخفی است و مدت زمان انقضای آن به صورت پیش فرض معمولا 30 دقیقه در تنظیمات PHP در نظر گرفته شده و پس از این 30 دقیقه سشن خود به خود منقضی می شود، در صورتی که کاربر در بین این 30 دقیقه مجددا درخواست ارسال کند سشن برای 30 دقیقه دیگر تمدید می شود، نکته مهم اینکه مفسر PHP برای هر سشن در سمت کاربر (مرورگر) یک کوکی نیز با مقادیر تصادفی ایجاد می کند، این کوکی با هر درخواست مقادیرش را به سرور ارسال می کند و نشست مرتبط با کوکی به روز می شود، از آنجایی که مدت زمان انقضای کوکی در حالت پیش فرض پس از بستن پنجره مرورگر (At end of session) تعیین می شود لذا زمانی که کاربر پنجره مرورگر را ببندد اتصال سمت کاربر و سرور که همان کوکی باشد قطع، سشن در سرور غیرقابل استفاده و پس از 30 دقیقه حذف می شود، سشن هایی که هنوز در سرور نگهداری می شوند بدون وجود کوکی در سمت کاربر عملا بی مصرف هستند و خود به خود حذف خواهند شد، لذا بدون وجود کوکی معتبر در سمت کاربر نمی توان از سشن سمت سرور استفاده کرد.
نکته: مدت زمان انقضای کوکی و سشن قابل تغییر است اما اصول کار همان است که در بالا توضیح داده شد.
نویسنده: ساناز
زمان: ۱۳:۰۳:۱۱ - تاریخ: ۱۳۹۷/۰۴/۰۹
سلام خدا قوت من یک صفحه لاگین دارم و مشکلی که هست اینه که اگر نام کاربری و رمز عبور هم صحیح نباشه با رفرش کردن صفحه عمل لاگین انجام شده و به صفحه اصلی سایت وارد میشه
پاسخ: 
توضیحات ارائه شده برای دریافت پاسخ دقیق کافی نیست! قاعدتا کدنویسی برنامه دارای اشکالی است که باید سورس کدها گام به گام خطایابی و مشکل رفع شود.
نویسنده: محمد جواد
زمان: ۱۹:۱۲:۴۶ - تاریخ: ۱۳۹۷/۰۹/۰۳
سلام . استفاده از کوکی ها باعث نمیشه امنیت اطلاعات کاربر در خطر بیفته ؟ و یه سوال اینکه میشه همین پست رو با استفاده از localStorage.setItem بازنویسی کنید ؟ اصلا امکانش هست ؟
پاسخ: 
استفاده از کوکی به خودی خود خطر امنیتی نیست، روش متداولی است که تقریبا در تمام پنل های ورود مبتنی بر وب به کار می رود، در خصوص استفاده از Local Storage این مبحث شباهت های زیادی به بحث کوکی دارد اما هر کدام برای هدف خاص خود تعریف شده اند، کوکی شامل اطلاعاتی تا حداکثر 4096 بایت است که پس از مدتی می تواند خود به خود منقضی شود، این اطلاعات معمولا با هدف ارسال به سرور در مرورگر نگهداری و در هر درخواست HTTP بین مرورگر و سرور بدون واسطه رد و بدل می شود و لذا گزینه معمول در طراحی سیستم ورود و خروج سایت است، اما Local Storage فضای ذخیره سازی سمت کاربر است که تا 5 مگابایت اطلاعات برای هر دامنه را در خود جای می دهد و بیشتر جنبه استفاده در سمت مرورگر و در کدهای جاوا اسکریپت را دارد، گزینه مناسبی برای سیستم ورود و خروج سایت نیست چرا که برای رد و بدل اطلاعات باید از یک روش واسط مانند Ajax استفاده کنیم.
نویسنده: میرحسینی
زمان: ۱۷:۲۸:۳۲ - تاریخ: ۱۳۹۸/۰۳/۲۶
با سلام
من میخام کاربر هنگامی که فیلدهای فرم پر میکند اگه نام کاربری تکراری بود با ajax پیغام خطا نمایش داده شود اگر نام کاربری تکراری بود پیغام این نام قبلا گرفته شده و در غیر اینصورت پیغام این نام آزاد است را چاپ کند
نویسنده: aza
زمان: ۲۰:۰۵:۰۰ - تاریخ: ۱۳۹۸/۰۳/۲۶
من میخام با php و mysql و ajax نام کاربری از کاربر گرفته شود و در صورتی که تکراری باشه پیغام خطا بده با آجاکس
$username = $_POST['username'];

$sql = mysqli_query($condb, "SELECT * FROM `users` WHERE `username`='$username'");
$num = mysqli_num_rows($sql);

if ($num != 0) {
echo "<span style='color:red'>این نام قبلا ثبت شده</span>";
} else {
echo "<span style='color:green'>این نام آزاد است </span>";
}
}
مشکل این دستورات چیست؟ که در خروجی با زدن هر نام کاربری پیغام" این نام آزاد است "میدهد
پاسخ: 
بدون دسترسی به سورس کدها و امکان اجرای برنامه نمی توان نظر خاصی داد، ممکن است خطایی در اتصال یا در پرس و جوها وجود داشته باشد، توصیه می کنیم بعد از اجرای تابع mysqli_query وضعیت خطا را مشابه نمونه کد زیر بررسی کنید:
$sql = mysqli_query($condb, "SELECT * FROM `users` WHERE `username`='$username'");
if(!$sql){
echo mysqli_error($condb);
}
همچنین بررسی کنید که مقادیر موجود در دیتابیس دقیقا مشابه با مقادیری که در کدهای PHP استفاده می کنید از توابع و فیلترهای واحدی عبور کنند، به فرض گاهی مقدار موجود در دیتابیس با توابعی رمزی شده و در هنگام مقایسه مقدار رمزی نشده در PHP با مقدار رمزی شده در دیتابیس مقایسه می شود و مشخص است که در این حالت حتی اگر دو مقدار با محاسبات ما یکسان باشند نتیجه مقایسه همواره false خواهد بود!
more لطفا پیش از ارسال یادداشت نکات زیر را مد نظر داشته باشید:
- مواردی که به کلی خارج از موضوع این مطلب هستند را در فرم منوی "تماس با ما" مطرح و پاسخ را از طریق ایمیل دریافت کنید.
- به سوالات کلی، مبهم، غیرضروری و مشکلاتی که تلاشی برای رفع آن نکرده باشید پاسخ خاصی داده نخواهد شد.
- کدها و اسکریپت های طولانی را ترجیحا در یک صفحه وب آنلاین قرار دهید تا امکان تست و بررسی وجود داشته باشد.
- تمام یادداشت ها بررسی و برای هر کاربر زمان مشخصی جهت پاسخگویی در نظر گرفته می شود، لذا از طرح سوالات متعدد در بازه زمانی کوتاه خودداری کنید.




3 × 1
 refresh
نکته:
با توجه به تاریخ نگارش آموزش های سایت و پیشرفت تکنولوژی های مرتبط با وب در سالیان اخیر، محتوای برخی از مطالب قدیمی ممکن است نیاز به ویرایش و به روزرسانی داشته باشد که این کار هم زمان با تهیه نسخه جدید «وبگو» به مرور در حال انجام است، لطفا در استفاده از مطالب سایت به این نکته دقت داشته و حتی المقدور از چند منبع مختلف استفاده نمائید.
آخرین دیدگاه ها
form adel
در:
سلام با تشکر از سایت خوب شما. یه سوال داشتم چگونه تمام این کدها را در جاوا اسکریپت همزمان قرار دهیم. من مثلا دستور این...
۲۱:۲۵:۴۰ ۱۳۹۸/۰۸/۲۴

form یه سوال کننده
در:
سلام. ببخشید چطور میشه ایمیل هایی رو میفرستن که ریپلای زدن رو ایمیلی که از طرف ما نبوده بیشتر تو تبلیغات دیدم امیدوارم منظورم و...
۰۳:۲۳:۰۸ ۱۳۹۸/۰۸/۲۴

form پرتو
در:
با عرض سلام و خسته نباشید امیدوارم حالتون خوب باشه من دو سه سال پیش وبلاگم رو حذف کردم ایا امکانش هست برگرده؟ ادرس...
۱۴:۵۵:۵۲ ۱۳۹۸/۰۸/۲۰

form علی
در:
سلام من نمی تونم html tag رو چطور در وبلاگم قرار بدم وبلاگم اینه
tagtak.blog.ir
۱۰:۲۳:۳۴ ۱۳۹۸/۰۸/۲۰

form حمید
در:
سلام. خسته نباشید. من میخاستم استایل فیلدهای فرمم رو تغییر بدم منتهی نمیدونم از چه کدهایی باید استفاده کنم. برای اینکه فرمی به شکل...
۱۰:۳۶:۱۹ ۱۳۹۸/۰۸/۱۹

form سمیه
در:
سلام ممنون بابت آموزش مفیدتون توی تگ ها هرچیزی که در تگ head قرار بگیره نمایش داده نمیشه، اما ممنون میشم...
۲۰:۴۹:۲۳ ۱۳۹۸/۰۸/۱۷

form استادمجازی
در:
سلام. از ادمین عزیز و همگی دعوت می کنم آموزش های خوبتون را بصورت آموزش ویدیویی یا صوتی و... در سایت ostadmajazi.com استادمجازی ...
۲۲:۱۲:۲۳ ۱۳۹۸/۰۸/۱۳

form mohamad
در:
سلام و خسته نباشید ، توی فرمی که ساختم چند تا drop down دارم که میخوام با php براشون شرط بذارم به طوری...
۱۳:۵۱:۳۴ ۱۳۹۸/۰۸/۱۰

form رضا
در:
خسته نباشید این جلسه آخر html بود؟؟؟؟
۰۱:۱۵:۰۷ ۱۳۹۸/۰۸/۱۰

form امیرمحمد
در:
سلام و خسته نباشید استاد بنده میخوام بین دو کد زیر که مشخص کردم رو به دست بیارم
// ---------------------set سلام...
۱۹:۳۰:۵۳ ۱۳۹۸/۰۸/۰۸

form حجت
در:
خیلی ممنونم از لطف شما. اوکی شد.
۱۰:۲۸:۳۵ ۱۳۹۸/۰۸/۰۶

form میلاد
در:
آشنایی نسبی با css, php و ajax دارم و نمیخام از library های موجود در نت استفاده کنم. خواستم با همین متد که انصافا روان...
۲۳:۲۲:۵۵ ۱۳۹۸/۰۸/۰۵

form عرفان
در:
با سلام. مدتی بود که بدلایل مشکلات زیاد نتونستم به وبلاگم رسیدگی کنم ولی وقتی برگشتم میبینم که هزاران بازدید داشتم و همشونم به زبان...
۲۲:۴۹:۴۴ ۱۳۹۸/۰۸/۰۵

form raha
در:
سلام وقتتون بخیر ببخشید علامت @ در کل به چه معناست ممنون میشم پاسخ دهید
۲۰:۱۲:۵۹ ۱۳۹۸/۰۸/۰۵

form میلاد
در:
باسلام تشکر از مطالب روان و پرکاربردتان. در خصوص آموزش مذکور، نحوه و ترفند نمایش محور عمودی در سمت چپ نمودار (مشابه...
۰۲:۳۸:۴۰ ۱۳۹۸/۰۸/۰۵