ساخت سیستم خروج کاربران (Logout) با PHP

29 آبان 1397
php-logout

در این قسمت این مبحث را با هم دیگر به چالش می کشیم که وقتی کاربر با نام کاربری و رمز عبور وارد سایت شده است (دقت نمایید که لینک تایید در ایمیل خود را نیز فعال کرده باشد) و یا اینکه اولین بار است که ثبت نام کرده است باید گزینه ی خروج (یا همان logout) برای او در صفحه index یا هر صفحه ی دیگری در هدر سایت قابل مشاهده باشد. تا بتواند عمل خروج از وب سایت را انجام دهد.

به همین خاطر در ابتدا باید فایل logout.php را در آدرس C:\wamp\www\ecommerce ایجاد نمایید. به تصویر زیر نگاه کنید.

ایجاد فایل logout

یک سوال:در فایل logout.php چه کاری باید صورت گیرد؟
پاسخ: جواب این سوال بسیار ساده است؛ در این فایل (فایل logout.php ) ما باید آن متغییری را که برای login کردن لازم است (اگر یادتان باشد این متغییر همان متغییر سراسری $_SESSION["customer_email"] می باشد.) را کلا از بین ببریم. در واقع باید تمام SESSION ها را حذف کنیم. برای انجام اینکار باید از تابع معروف unset() استفاده شود. برای اینکه از چگونگی حذف SESSION ها درک درستی داشته باشید، ادامه مطلب را مطالعه کنید.

پاک کردن SESSION ها در PHP

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 قرار دهیم.

فعال کردن قابلیت خروج (Logout) برای کاربران در PHP

دقت کنید که من فرض می کنم که شما تمامی مراحل موجود در قسمت "آموزش ساخت درگاه پرداخت در 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++ باز می کنیم. به تصویر زیر نگاه کنید.

باز کردن فایل Shopping_cart

وقتی این فایل را باز کردیم، کدهای زیر را در آن پیدا کنید.

<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 را باز می کنیم.

باز کردن فایل header

حالا باید کدهای زیر را در آن پیدا کنیم (دقت کنید کاری که من می خواهم انجام دهم این است که در منوی سایت هم بتوانم به مشتری این امکان را بدهم که به راحتی به حساب کاربری خود وارد و یا خارج شود).

            <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() از بین می رود و در ادامه ما را به صفحه اصلی سایت باز می گرداند، یعنی به تصویر زیر برگشت داده می شویم.

بازگشت به صفحه index

خب دوستان عزیزم به پایان این قسمت آموزشی رسیدیم. در قسمت آینده در مورد login کردن کاربرانی که قبلا در سایت ثبت نام نموده اند، با هم بحث خواهیم کرد. تا قسمت آینده، کدها را به خوبی آزمایش و تست کنید و اگر مشکلی داشتید در قسمت نظردهی عنوان کنید، تا آن را برطرف کنم. موفق باشید.

تمام فصل‌های سری ترتیبی که روکسو برای مطالعه‌ی دروس سری فروشگاه اینترنتی با PHP توصیه می‌کند:
نویسنده شوید
دیدگاه‌های شما (2 دیدگاه)

در این قسمت، به پرسش‌های تخصصی شما درباره‌ی محتوای مقاله پاسخ داده نمی‌شود. سوالات خود را اینجا بپرسید.

فرزین
24 شهریور 1402
سلام . خسته نباشید . میخواستم اگر امکانش هست شیگرا بنویسید .یو آی رو هم آپدیت کنید .

در این قسمت، به پرسش‌های تخصصی شما درباره‌ی محتوای مقاله پاسخ داده نمی‌شود. سوالات خود را اینجا بپرسید.

علی
05 اردیبهشت 1400
سلام وقتتون بخیر ازتون ی راهنمایی میخواستم، ممنون میشم اگه راهنمایی بفرمایید من میخوام وقتی که یک کاربر مهمان ( کسی که وارد حساب کاربریش نشده) وارد سایت میشه بر فرض دکمه a رو نبینه ، و وقتی که وارد حساب کاربریش شد بتونه این دکمه رو ببینه ممنون میشم راهنمایی بفرمایید، تشکر

در این قسمت، به پرسش‌های تخصصی شما درباره‌ی محتوای مقاله پاسخ داده نمی‌شود. سوالات خود را اینجا بپرسید.