در این قسمت این مبحث را با هم دیگر به چالش می کشیم که وقتی کاربر با نام کاربری و رمز عبور وارد سایت شده است (دقت نمایید که لینک تایید در ایمیل خود را نیز فعال کرده باشد) و یا اینکه اولین بار است که ثبت نام کرده است باید گزینه ی خروج (یا همان logout) برای او در صفحه index یا هر صفحه ی دیگری در هدر سایت قابل مشاهده باشد. تا بتواند عمل خروج از وب سایت را انجام دهد.
به همین خاطر در ابتدا باید فایل logout.php را در آدرس C:\wamp\www\ecommerce ایجاد نمایید. به تصویر زیر نگاه کنید.
یک سوال:در فایل logout.php چه کاری باید صورت گیرد؟
پاسخ: جواب این سوال بسیار ساده است؛ در این فایل (فایل logout.php ) ما باید آن متغییری را که برای login کردن لازم است (اگر یادتان باشد این متغییر همان متغییر سراسری $_SESSION["customer_email"] می باشد.) را کلا از بین ببریم. در واقع باید تمام SESSION ها را حذف کنیم. برای انجام اینکار باید از تابع معروف unset() استفاده شود. برای اینکه از چگونگی حذف SESSION ها درک درستی داشته باشید، ادامه مطلب را مطالعه کنید.
session برخلاف cookie دارای طول عمر نیست. یعنی با بسته شدن مرورگر اطلاعات session هم پاک می شوند. گاهی اوقات لازم است که شما فورا session را پاک کنید. مثل حالتی که الان ما در مورد logout کردن کاربر با آن مواجه هستیم. ما در این حالت بدون اینکه مرورگر را ببندیم، می خواهیم کاربر را logout کنیم و همه session های مربوط به login آن کاربر را ببندیم. برای پاک کردن session از تابع زیر استفاده می شود:
<?php // destroy the session session_destroy(); ?>
کد بالا تمام اطلاعات موجود در session را حذف می کند، ولی اگر بخواهیم اطلاعات یک سشن خاص، مثلا customer_email را پاک کنید، می توانید از تابع unset() استفاده نمایید:
<?php // remove session variable customer_email unset($_SESSION["customer_email"]); ?>
اما در ادامه یاد می گیریم که چگونه برای یک کاربر قابلیت Logout قرار دهیم.
دقت کنید که من فرض می کنم که شما تمامی مراحل موجود در قسمت "آموزش ساخت درگاه پرداخت در PHP با زرین پال – قسمت چهارم" را انجام داده اید. حالا مراحل زیر را با هم انجام می دهیم:
1- ابتدا فایل logout.php را با استفاده از Notepad++ باز کنید و کدهای زیر را در آن قرار دهید.
<?php session_start(); unset($_SESSION['customer_email']); echo "<script>window.open('index.php','_self')</script>"; ?>
کاری که فایل logout.php انجام می دهد این است که ابتدا متغییر سراسری $_SESSION['customer_email'] را از بین می برد و در ادامه، فایل index.php را باز می کند.
2- حالا به آدرس C:\wamp\www\ecommerce\includes می رویم و فایل Shopping_Cart.php را با استفاده از Notepad++ باز می کنیم. به تصویر زیر نگاه کنید.
وقتی این فایل را باز کردیم، کدهای زیر را در آن پیدا کنید.
<span><a>به صندوق خرید شما برویم!</a></span><br/>
آنها را پاک کنید و کدهای زیر را به جای آنها قرار دهید.
<!---- Login and logout link to the account -----> <?php if(!isset($_SESSION['customer_email'])) { echo "<span><a href='checkout.php' style='background: green;color:#fff;text-decoration: none;'>وارد شدن به حساب کاربری</a></span>"; } else { echo "<span><a href='logout.php' style='background:red;color:#fff;text-decoration: none;' >خارج شدن از حساب کاربری</a></span>"; } ?>
دقت کنید که در کدهای بالا گفته شده است که اگر متغییر سراسری $_SESSION['customer_email'] تنظیم نشده است، برای ما یک دکمه سبز رنگ (با محتوای "وارد شدن به حساب کاربری") ظاهر شود و با زدن بر روی این دکمه سبز رنگ، ما را به صفحه ورود به حساب کاربری هدایت می کند (یعنی همان فایل checkout.php می برد. در این صفحه، اگر قبلا ثبت نام کرده بودید از شما برای ورود دوباره رمز و ایمیل را درخواست می کند و اگر اولین بار است که به سایت آمده اید باید در سایت ثبت نام انجام دهید.).
اما در غیر اینصورت (یعنی ما login کرده ایم) برای ما یک دکمه قرمز رنگ (با محتوای "خارج شدن از حساب کاربری") ظاهر می شود و با زدن بر روی این دکمه قرمز رنگ ما را به فایل logout.php هدایت می کند و در نتیجه از حساب کاربری خود خارج می شویم.
3- حالا باید این بار به سراغ فایل Header.php برویم به همین خاطر باز هم به آدرس C:\wamp\www\ecommerce\includes رفته و این بار فایل Header.php را باز می کنیم.
حالا باید کدهای زیر را در آن پیدا کنیم (دقت کنید کاری که من می خواهم انجام دهم این است که در منوی سایت هم بتوانم به مشتری این امکان را بدهم که به راحتی به حساب کاربری خود وارد و یا خارج شود).
<li><a href="customer/my_account.php" target="_parent">حساب من</a></li> <li><a href="#" target="_parent">SingUp(خروج)</a></li>
آنها را پاک می کنیم و به جای آنها کدهای زیر را قرار می دهیم.
<li> <?php if(!isset($_SESSION['customer_email'])) { echo "<a href='checkout.php'><span>حساب من</span></a>"; } else { echo "<a href='customer/my_account.php'><span>حساب من</span></a>"; } ?> </li> <li> <?php if(!isset($_SESSION['customer_email'])) { } else { echo "<li><a href='logout.php'><span>خارج شدن از حساب کاربری</span></a></li>"; } ?> </li>
در این کدها هم، همان کاری را انجام می دهیم که در سبد خرید ( فایل Shopping_Cart.php) انجام دادیم. درک کدهای بالا بسیار آسان می باشد و از توضیح آن صرف نظر می کنم.
حالا به صورت عملی با هم یکبار سایت را تست می کنیم تا ببینیم که چه اتفاقی روی داده است.
فرض کنید که مشتری هنوز وارد حساب کاربری خود نشده است ( یا اصلا در وب سایت ثبت نام نکرده باشد)، در ابتدا مشتری با تصویر زیر روبرو خواهد شد.
همانطور که مشاهده می نمایید در کادر سبد خرید (در سمت چپ و بالای سایت) دکمه سبز رنگ با عنوان "وارد شدن به حساب کاربری" دیده می شود. هم چنین منوی سایت نیز تغییر کرده است. به تصویر زیر نگاه کنید.
تب "حساب من" به تب ها اضافه شده است. دقت نمایید که اگر بر روی این تب "حساب من" و یا بر روی دکمه سبز رنگ "وارد شدن به حساب کاربری" در سبد خرید فشار دهید، سایت، مشتری را برای ورود به حساب کاربری اش به فایل checkout.php هدایت می کند که می توانید تصویر آن را در زیر مشاهده نمایید.
فرض کنیم که مشتری وارد حساب کاربری اش شد (حالا یا ثبت نام جدیدی انجام داد و یا قبلا ثبت نام کرده است و اکنون با ایمیل و رمزی که قبلا داشته وارد حساب کاربری اش می شود) حالا به محض وارد شدن، متغییر سراسری $_SESSION["customer_email"] مقداری به خودش می گیرد که در نتیجه اگر باز به صفحه اصلی سایت برگردیم، صفحه اصلی سایت به شکل تصویر زیر تغییر می کند.
تغییرات ایجاد شده شامل ایجاد یک دکمه قرمز رنگ با عنوان "خارج شدن از حساب کاربری" در سبد خرید و تغییر دوم به وجود آمدن یک تب اضافه در منوی سایت با عنوان "خارج شدن از حساب کاربری" می باشد که من آنها را با فلش زرد رنگ برجسته کرده ام.
حال اگر بر روی هر کدام از این دو تغییر ( تب "خارج شدن از حساب کاربری " در منو و دکمه قرمز رنگ "خارج شدن از حساب کاربری" در سبد خرید ) کلیک کنید، ابتدا شما را به فایل logout.php هدایت می کند و در آنجا متغییر سراسری $_SESSION["customer_email"] را با استفاده از تابع unset() از بین می رود و در ادامه ما را به صفحه اصلی سایت باز می گرداند، یعنی به تصویر زیر برگشت داده می شویم.
خب دوستان عزیزم به پایان این قسمت آموزشی رسیدیم. در قسمت آینده در مورد login کردن کاربرانی که قبلا در سایت ثبت نام نموده اند، با هم بحث خواهیم کرد. تا قسمت آینده، کدها را به خوبی آزمایش و تست کنید و اگر مشکلی داشتید در قسمت نظردهی عنوان کنید، تا آن را برطرف کنم. موفق باشید.
در این قسمت، به پرسشهای تخصصی شما دربارهی محتوای مقاله پاسخ داده نمیشود. سوالات خود را اینجا بپرسید.
در این قسمت، به پرسشهای تخصصی شما دربارهی محتوای مقاله پاسخ داده نمیشود. سوالات خود را اینجا بپرسید.
در این قسمت، به پرسشهای تخصصی شما دربارهی محتوای مقاله پاسخ داده نمیشود. سوالات خود را اینجا بپرسید.