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 مطالب بیشتر:
» آموزش ساخت فرم عضویت در سایت با PHP و MySQL
» آموزش ساخت فرم تماس با PHP و MySQL
» ایجاد لینک دانلود مدت دار با PHP و MySQL
» آموزش حذف گروهی اطلاعات از MySQL با استفاده از چک باکس
» نحوه رسم چارت و نمودار آماری با PHP و MySQL
commentنظرات (۷۰ یادداشت برای این مطلب ارسال شده است)
more یادداشت های جدید بر اساس تاریخ ارسال در انتهای یادداشت های موجود نمایش داده می شوند.
نویسنده: mahdi
زمان: ۲۳:۳۵:۳۴ - تاریخ: ۱۳۹۲/۰۴/۲۲
سلام خیلی خیلی ممنون از شما ولی یه مشکل :
الان من کدی که بهم دادید رو به این شکل تغییر دادم :
<?php
$con = mysql_connect("mysql.xzn.ir", "u864181118_rav", "pass")
or die(mysql_error());
//نام دیتابیس
mysql_select_db("u864181118_mahdi", $con)
or die(mysql_error());
//پرس و جوی فرضی
$result = mysql_query ("SELECT country, username, password FROM register WHERE username = '$username' AND password = '$password'")
or die(mysql_error());
while($row = mysql_fetch_array($result)){
$_SESSION['country'] = $row['country'];
$_SESSION['username'] = $row['username'];
$_SESSION['password'] = $row['password'];
}
//گرفتن خروجی فرضی
echo $_SESSION['country'];
echo "<br>";
echo $_SESSION['username'];
echo "<br>";
echo $_SESSION['password'];
mysql_close($con);
?>
اما متاسفانه country رو نمیده و چاپ نمی کنه ؟! باید چیکار کرد ؟ آیا کد اشکال داره ؟ممنون
پاسخ: 
سلام
بحث سشن ها جزء مباحث پیشرفته برنامه نویسی PHP است که به نظر شما با آن هنوز کامل آشنا نیستید، یک نشست با تابع
session_start();
باید شروع شود، یعنی این تابع را در ابتدای هر صفحه ای که می خواهید نشست در آن ادامه داشته باشد باید قرار داده باشید.
نویسنده: mahdi
زمان: ۱۲:۰۸:۰۳ - تاریخ: ۱۳۹۲/۰۴/۲۳
سلام مجدد ...
خیلی ممنون ولی من این کار رو انجام داده بودم ! این کد صفحه کنترل پنل کاربری که بعد از ورود به آنجا منتقل می شوند :
کد حذف شد
حال می خواهم در قسمتی که مشخص شده است ، وقتی کاربری لوگین کرد فقط اطلاعات مربوط به خودش مثل کشور ، نام کاربری و پسورد رو ببینه !
میشه لطفا راهنمایی کنید یا برای من انجام بدید ؟ ممنون ...
پاسخ: 
سلام
کدها در تئوری مشکلی ندارند، برای خطایابی تابع زیر را در ابتدای صفحه قرار دهید:
error_reporting(-1);
برای اطمینان از اینکه پرس و جوی دیتابیس، یک نتیجه بر می گرداند، در زیر پرس و جو کد زیر را قرار دهید:
echo mysql_num_rows($result);
اگر نام کاربری و کلمه عبور صحیح باشد، این کد مقدار 1 را چاپ می کند، در ضمن توجه کنید که ستون های country, username, password باید در جدول register موجود باشند.
نکته: به جهت محدودیت هایی که بعضا هاست های رایگان دارند، بهتر است کدها را در لوکال سرور امتحان کنید.
نویسنده: یوسفی
زمان: ۱۹:۵۶:۵۷ - تاریخ: ۱۳۹۲/۰۴/۳۱
واقعا آموزش هاتون عالیه. انشاالله که تو همه عرصه ها موفق باشید.
نویسنده: نورمند
زمان: ۱۴:۴۸:۰۸ - تاریخ: ۱۳۹۲/۰۵/۱۷
بسیار عالی بود انشا الله همیشه موفق باشید
نویسنده: رضا
زمان: ۰۱:۱۱:۱۶ - تاریخ: ۱۳۹۲/۰۶/۱۹
سلام
خیلی آموزش عالی بود
من یه مشکل دارم من توی سایتم دو تا پنل لاگین دارم
میخوام این اتفاق فقط روی یکی از پنل ها بیفته ولی روی هر دوتا پنل انجام میشه
لطفا راهنمایی کنید
پاسخ: 
سلام
پاسخ به سوالتان نیازمند داشتن جزئیات بیشتری از مشکل و هدف شما است، به عبارتی بدون بررسی دقیق سورس کدهای سایت نمی توان خیلی کمک کرد.
نویسنده: رضا
زمان: ۱۸:۱۱:۳۱ - تاریخ: ۱۳۹۲/۰۶/۱۹
من توی سایتم یه قسمت برای مدیریت وجود داره که فقط مدیران میتونن وارد بشن و یه قسمت هم آزاد هست برای کاربران و نام سشن هایی که نشست می کنن کاملا متفاوت هستن مثلا برای مدیریت من سشن های
$_SESSION['admin_username']
$_SESSION['admin_password']
رو ست کردم و برای کاربران سشن های
$_SESSION['user_username']
$_SESSION['user_password']
رو ست کردم
حالا من میخوام که فقط سشن های مربوط به کاربران به خاطر بسپاره
پاسخ: 
به روش های مختلف می توانید ست شدن کوکی یادآوری را محدود به یک گروه کاربری کنید، به طور مثال می توانید یک شرط if تعریف کنید که اگر session_name برابر به فرض admin_username بود، قسمت کوکی یادآوری اجرا شود، یا اگر سشن admin_username ست شده بود، این قسمت اجرا شود، روش دیگر این است که در قسمت فرم ورود، یک input از نوع hidden بسازید و مقادیر آن را پیش از ست کردن کوکی بررسی کرده و متناسب با آن کوکی را اجرا کنید.
در واقع نوشتن این امکان نیازمند اندکی آشنایی و تجربه قبلی کار با PHP است.
نویسنده: رضا
زمان: ۱۰:۴۲:۲۳ - تاریخ: ۱۳۹۲/۰۶/۲۰
اون دو تا پنلی که گفتم، اطلاعاتشون به دوتا صفحه مختلف ارسال میشه.
من کوکی یادآوری رو توی صفحه ای که مربوط به کاربران هست اجرا می کنم یعنی بعد از اینکه سشن ها ست شد خط بعد کوکی اجرا میشه
ولی باز زمانی که وارد پنل مدیریت میشم و مرورگر رو میبندم و دوباره باز می کنم میبینم که پنل مدیریت بدون اینکه صفحه لاگین بیاد باز میشه
ببخشید من خیلی سوال می کنم
پاسخ: 
کار با کوکی ها نیازمند داشتن تجربه بالا در برنامه نویسی وب و زبان هایی مانند PHP و JavaScript است، در این صورت می توانید تاریخ انقضای کوکی های ست شده را از طریق مرورگر خود بررسی کنید و اگر تاریخ کوکی برای کاربران عادی بیشتر از یک روز بود، مطمئن شوید که ایراد از کدنویسی شما است که کوکی را برای همه ست می کند، ضمن اینکه باید با نحوه حذف کوکی از مرورگر جهت تست و آزمایش و خطا آشنا باشید.
نویسنده: مهنا
زمان: ۲۱:۰۸:۴۴ - تاریخ: ۱۳۹۲/۰۷/۲۸
سلام خسته نباشید. از آموزشهای بسیار مفیدتون تشکر می کنم. فقط من یه سوال داشتم من وقتی می خواستم وارد شم با اینکه اطلاعات با دیتابیس تطبیق داشت ارور میداد ولی وقتی خط مربوط به md5 رو غیر فعال کردم پیام داد که در حال استفاده از بخش کاربری هستید. اشکال کار از کجاست؟ چرا نمیشه از این تابع استفاده کنم؟ مثلا خودم یه یوزر و پسورد تو دیتابیس insert کردم ولی اونجا که با md5 رمزنگاری نمیشه درسته؟ چطور این مشکل برطرف میشه؟
ممنون میشم اگه راهنمایی بفرمایید
پاسخ: 
سلام
هنگام درج (INSERT) اطلاعات نیز باید از طریق کدهای PHP این کار انجام دهید (به فرض ایجاد فرم ثبت نام) و پیش از درج، مقادیر متغیرها را با تابع md5 رمزی و سپس در دیتابیس ذخیره کنید، به عبارتی اگر به دیتابیس خود توجه کنید، مقادیر رمز باید به صورت کدهای رندوم تبدیل شده باشند (مرحله درج و تطبیق باید هر دو از md5 استفاده کنند).
نویسنده: مهنا
زمان: ۱۰:۴۰:۴۶ - تاریخ: ۱۳۹۲/۰۸/۰۵
سلام. ممنون از راهنماییتون. یه سوال دیگه داشتم اگه ما بخواهیم این پیغام تو کل صفحات بیاد باید چه کار کنیم؟ چون وقتی آدرسه این صفحات رو به جای user.php میذارم وقتی میخوام برم تو اون صفحه چون وارد نشدم میفرسته به صفحه اول سایت باید از دستور خاصی همراه session استفاده بشه؟ تشکر
پاسخ: 
سلام
باید سشن در تمام صفحاتی که نیاز به برقراری نشست است ادامه داشته باشد (استفاده شود)، تا به این صورت سشن آی دی های ست شده در صفحات قبل، قابل انتقال از صفحه ای به صفحه دیگر و به تبع قابل بررسی باشند (که اگر ست شده بود، ادامه کدها اجرا شود، در غیر این صورت به صفحه ورود برگردد).
نویسنده: ابوالفضل
زمان: ۱۸:۱۴:۴۳ - تاریخ: ۱۳۹۲/۰۸/۱۷
سلام . با تشکر از اطلاعات بسیار خوبتون . یه سوال دارم. من می خوام تو سایتم امکان این رو بذارم که کارمندا با وارد کردن نام کاربری و پسوردشون هر ماه فیش حقوقیشون رو ببینن . چطوری می تونم این کار رو انجام بدم ؟ بعد از ایجاد دسترسی برای هر کدومشون چطوری می تونم تعریف کنم که هر کارمند فیش حقوقی خودش رو ببینه ؟ لطفا راهنمایی کنید . متشکرم.
پاسخ: 
سلام
سوالتان کلی است، نوشتن این سیستم نیازمند درک مباحثی نسبتا پیشرفته مانند سشن ها و تجربه لازم در کار با MySQL است، در واقع باید برای هر کاربر یک ستون اختصاصی در دیتابیس داشته باشید و در هنگام فراخوانی اطلاعات، متناسب با نام کاربری و کلمه عبور، اطلاعات ستون یا ستون های متناظر در جداول را فراخوانی کنید (برای طراحی این سیستم قاعدتا باید ابتدا مباحث مقدماتی را مطالعه و تمرین و تکرار کافی داشته باشید).
نویسنده: rasool
زمان: ۲۰:۰۸:۱۷ - تاریخ: ۱۳۹۲/۰۹/۳۰
چطور میشه بعد از تموم شدن زمان به طور اتومات به یک صفحه حاوی اطلاعیه تموم شدن زمان منتقل بشیم. (از انتخاب مرا به خاطر داشته باش)
elseif (isset($_SESSION['SESS_MEMBER_ID']) || (trim($_SESSION['SESS_MEMBER_ID']) =='1')){
$login_time=10;//یک ساعت
setcookie(session_name(),session_id(),time()+$login_time,("/"));
}
پاسخ: 
طراحی این موارد نیازمند تسلط کامل شما به مباحث سشن، کوکی و تاریخ و زمان در PHP است، در این صورت به روش های مختلف می توان این کار را انجام داد، به طور مثال، هم زمان با ایجاد کوکی یادآوری، یک کوکی با مدت زمان ماندگاری بیشتر ایجاد کنید و مقادیر value آن به فرض تاریخ انقضای کوکی اصلی باشد، سپس با مقایسه تاریخ فعلی و تاریخ انقضای کوکی می توان به نتیجه مورد نظر رسید (یا هر روش ابتکاری دیگری).
نویسنده: مهران
زمان: ۱۱:۳۱:۱۳ - تاریخ: ۱۳۹۲/۱۲/۰۳
ماها عادت داریم مطالب خیلی خوب و مجانی که میبینیم تشکر نکنیم ولی بسیار بسیار ممنون از اینکه بدون چشمداشت جهت اشتراک گذاری این مطالب تلاش میکنین.
نویسنده: ebrahim
زمان: ۱۳:۰۹:۵۳ - تاریخ: ۱۳۹۲/۱۲/۰۵
سلام آموزشهای سایتتون فوق العاده اند. لطفا با قدرت به کارتون ادامه بدین.
من مطالب رو مو به مو خوندم و مثل آموزشهایی که شما توضیح دادین انجام دادم.
ولی گزینه مرا به خاطر بسپارم کار نمی کنه یعنی چه تیک داشته باشه چه تیک نداشته باشه یه کار رو انجام میده
http://isasak.ir/sabtname/New/vorud.php
پاسخ: 
سلام
کد مشکلی ندارد، منتها یک بخش دیگر باید به آن اضافه شود، حالتی که کاربر ابتدا دکمه مرا به خاطر بسپار را می زند و کوکی تنظیم می شود، سپس از سایت خارج شده و مجددا بدون تیک زدن چک باکس وارد می شود، در اینجا باید زمان کوکی 0 یا همان at the end of session تعیین شود، بدین منظور یک دستور شرطی دیگر تعریف کنید:
//بررسی امکان مرا به خاطر بسپار
elseif (isset($_SESSION['remember']) && $_SESSION['remember'] == '1'){
$login_time = 3600;//یک ساعت
setcookie(session_name(),session_id(),time()+$login_time,("/"));
}
else{
$login_time = 0;//صفر
setcookie(session_name(),session_id(),time()+$login_time,("/"));
}
نکته: راه حل تست نشده!
نویسنده: manizhe
زمان: ۰۴:۰۰:۵۸ - تاریخ: ۱۳۹۳/۰۱/۰۶
سلام من در پنل مدیریت ام وقتی روی دکمه ویرایش یک عکس کلیک می کنم عکس جدید در بانک جایگزین قبلی می شود ولی در پوشه ای که همه ی عکس ها ذخیره می شود عکس قبلی باقی است چطوری اون عکس را حذف کنم از پوشه ممنون میشم که اگه سریع جواب بدین خیلی ضروری است
پاسخ: 
سلام
روش ساده ای وجود ندارد! باید برنامه نویسی بلد باشید و از توابعی مانند unlink در PHP استفاده کنید، البته تغییر کدها بدون داشتن تسلط لازم توصیه نمی شود.
نویسنده: محمد
زمان: ۱۸:۰۴:۱۹ - تاریخ: ۱۳۹۳/۰۴/۲۳
سلام
دستورات به درستی کار میکنه ولی زمان در setcookie اینطوری نیست که شما نوشتید مثلا من زمان رو 60 (یک دقیقه) تنظیم کردم ولی بیشتر از یک دقیقه است !
یه چیز دیگه هم برای من مبهمه ، اینکه شما فقط این کد را نوشتید
setcookie(session_name(),session_id(),time()+$login_time,("/"));
و البته درست هم کار می کند ولی چگونه بعد از منقضی شدن کوکی ، سشن هم منقضی میشه !!!؟؟ در این دستورات هیجا از unset برای سشن ها استفاده نشده
پاسخ: 
سلام
- زمان مشکلی ندارد! ممکن است مجددا کوکی را به روز رسانی و در نتیجه زمان را تمدید کرده باشید، برگرفته از راهنمای PHP:
 time() + 60 * 60 * 24 * 30 will set the cookie to expire in 30 days
یعنی 60 ثانیه در 60 دقیقه در 24 ساعت در 30 روز که عدد 30 روز به ثانیه به دست می آید، لذا 60 اول به میزان همان 60 ثانیه است.
http://php.net/manual/en/function.setcookie.php
- نیازی به unset کردن سشن در این مرحله نیست، در اینجا بر اساس زمان باقی مانده کاربر کد تنظیم شده، در مرحله دوم (اگر زمان کاربر منقضی شده بود) می توان او را به یک صفحه دیگر منتقل و سشن را در آنجا unset کرد، البته الزامی هم وجود ندارد، فرض کنید کاربر مرورگر را ببندد یا برق قطع شود!
more لطفا پیش از ارسال یادداشت نکات زیر را مد نظر داشته باشید:
- مواردی که به کلی خارج از موضوع این مطلب هستند را در فرم منوی "تماس با ما" مطرح و پاسخ را از طریق ایمیل دریافت کنید.
- به سوالات کلی، مبهم، غیرضروری و مشکلاتی که تلاشی برای رفع آن نکرده باشید پاسخ خاصی داده نخواهد شد.
- کدها و اسکریپت های طولانی را ترجیحا در یک صفحه وب آنلاین قرار دهید تا امکان تست و بررسی وجود داشته باشد.
- تمام یادداشت ها بررسی و برای هر کاربر زمان مشخصی جهت پاسخگویی در نظر گرفته می شود، لذا از طرح سوالات متعدد در بازه زمانی کوتاه خودداری کنید.




8 × 8
 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 میلاد
در:
باسلام تشکر از مطالب روان و پرکاربردتان. در خصوص آموزش مذکور، نحوه و ترفند نمایش محور عمودی در سمت چپ نمودار (مشابه...
۰۲:۳۸:۴۰ ۱۳۹۸/۰۸/۰۵