چگونه در PHP مقدار متغیرها را بین صفحات ارسال و دریافت کنیم؟ روش های مختلف ارسال مقدار متغیر بین صفحات در PHP

0 54
۵/۵ - (۳ امتیاز)

فهرست

یکی از موضوعات مهم در برنامه نویسی تحت وب نگهداری اطلاعات حین استفاده از پروتکل های Stateless مثل HTTP می باشد. در بسیاری از موارد لازم است تا بتوانیم در یک صفحه وب یک متغیر را مقداردهی کرده و در صفحه دیگر مقدار آن را دریافت و استفاده کنیم. در این مقاله به بررسی روش های مختلف ارسال مقدار متغیر بین صفحات در PHP می پردازیم.

استفاده از پروتکل های Stateless

می دانیم که HTTP یک پروتکل Stateless است و این بدان معناست که در صورت استفاده از پروتکل HTTP باید بدانیم که سرور HTTP اطلاعات مربوط به وضعیت یا State را ذخیره نمی کند. برای مثال کاربر می تواند فرمان های مختلفی را به صورت پشت سر هم با استفاده از پروتکل HTTP ارسال کند اما هیچ فرمانی به فرمان دیگر وابسته نباشد. درواقع سرور HTTP تصور می کند هر فرمان را یک کاربر جدا ارسال کرده است. از این خاصیت HTTP در بسیاری از مواقع لازم است که تخطی شود. برای مثال فرض کنید محصولی را از یک فروشگاه اینترنتی انتخاب کرده اید و قصد دارید عملیات پرداخت را برای آن انجام دهید. اگر از خاصیت Stateless بودن HTTP تخطی نشود قادر نخواهید بود محصول را تهیه کنید. چرا که برای مثال قیمت محصول لازم است به درگاه پرداخت ارسال شود و از آنجا که HTTP یک پروتکل Stateless‌ است این اطلاعات بین صفحه وب سایت فروشنده و صفحه درگاه پرداخت نگهداری نمی شوند و عملا عملیات پرداخت با مشکل مواجه می شود.

برای ارسال مقدار متغیر بین صفحات در PHP روش های مختلفی وجود دارد که در این مقاله هر یک را معرفی می کنیم.

روش اول: استفاده از نشست یا Session

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

مساله ارسال اطلاعات بین صفحات وب را می توان با استفاده از نشست حل کرد. فرض کنید یک برنامه تحت وب نوشته اید که دارای ۲ صفحه است. اگر نشستی بین این دو صفحه ایجاد شود می توان اطلاعات را از صفحه اول به صفحه دوم (و حتی از صفحه دوم به صفحه اول) منتقل کرد. PHP برای این کار از یک متغیر آرایه ای سراسری به نام SESSION_$ استفاده می کند. مقادیری که قصد داریم بین صفحات جابجا کنیم می توانند در این متغیر قرار گیرند.

فرض کنید نیاز دارید صفحه اول برنامه شما شماره تلفن همراه کاربر را دریافت می کند و به سرور می فرستد. کدی برای کاربر پیامک می شود و کاربر باید کد دریافت شده را در فرم موجود در صفحه auth.php وارد کند. برای ارسال کد به سرور لازم است شماره تلفن همراه نیز به همراه آن در قالب JSON ارسال شود اما در صفحه دوم خبری از شماره تلفن نیست. برای حل این مشکل می توان از روش زیر استفاده کرد:

در صفحه اول:

session_start();

$phone = $_POST['phone']

$_SESSION['phone'] = $phone

در اینجا شماره تلفن (POST[‘phone’]_$) از طریق متد POST دریافت شده (برای مثال مقصد فرم می تواند صفحه فعلی یا SELF باشد) و پس از آن این مقدار در متغیر phone$ ذخیره شده است. آرایه SESSION_$ که قرار است متغیرهای مربوط به نشست را ذخیره کند مقدار phone$ را با استفاده از کلید phone ذخیره می کند.

در صفحه دوم:

session_start();

$phone = $_SESSION['phone'];

مشاهده می شود که در صفحه دوم با استفاده از SESSION_$ می توان به مقدار phone$ دسترسی داشت.

توجه داشته باشید برای استفاده از این روش حتما باید ()session_start در هر دو صفحه وجود داشته باشد تا نشستی ایجاد و پیگیری شود.

کوکی یا Cookie داده ای است که برخلاف نشست که سمت سرور ذخیره می شود، سمت کاربر یا کلاینت ذخیره می شود. با استفاده از کوکی می توان عملیات نگهداری اطلاعات و ارسال آن ها بین صفحات را انجام داد.

در PHP یک آرایه سراسری به نام COOKIE_$ استفاده می شود که اطلاعات کوکی ها را در خود ذخیره می کند. روال کار بسیار شبیه روش اول است. تاکید می کنیم کوکی برخلاف نشست سمت کلاینت ذخیره می شود.

مثال قبلی را در نظر بگیرید. با استفاده از کوکی می خواهیم مشکل را حل کنیم.

در صفحه اول:

$phone = $_POST['phone'];

$_COOKIE['phone'] = $phone

یا:

$phone = $_POST['phone'];

setcookie('phone', $phone);

در هر دو روش استفاده از کوکی، مقدار متغیر با استفاده از یک کلید درون آرایه سراسری قرار می گیرد و در صفحات بعدی می توان از آن استفاده کرد.

در صفحه دوم:

$phone = $_COOKIE['phone'];

توضیحات شبیه همان توصیحاتی است که برای روش اول گفتیم. مقدار متغیر phone$ با دسترسی به کلید phone در COOKIE_$ دریافت می شود.

روش سوم: استفاده از متد GET

با استفاده از متد GET نیز می توان مساله بیان شده را حل کرد. کار بسیار ساده است: کافی است متغیر را در قالب یک Query Parameter به صفحه دوم ارسال کرد.

در صفحه اول:

<a href="auth.php?phone=<?=$phone?>">Phone</a>

حال در صفحه دوم به راحتی می توان به این متغیر دسترسی داشت:

$phone = $_GET['phone'];

توجه شود با استفاده از متد GET می توان متغیری که به عنوان یک فیلد مخفی همراه با فرم از صفحه قبل ارسال شده نیز دریافت کرد اما این روش برای متد POST بهتر است.

روش چهام: استفاده از متد POST

در این روش می توان متغیر را همراه با فرم مورد نظر در قالب یک فیلد مخفی برای صفحه دوم ارسال کرد.

در صفحه اول:

<form method="post" action="auth.php">
    <input type="hidden" name="phone" value=<?php echo $phone;?>>
    <input type="submit"
</form>

مشاهده می شود که متغیر phone$ در قالب یک فیلد مخفی به صفحه دوم ارسال می شود. حال در صفحه دوم می توان به این مقدار ارسال شده دسترسی داشت.

در صفحه دوم:

$phone = $_POST['phone'];

و تمام!

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

سخن پایانی

در این مقاله به بررسی ارسال و دریافت اطلاعات بین صفحات وب پرداختیم و روش های مختلف برای ارسال مقدار متغیر بین صفحات در PHP را بررسی کردیم. در مقالات آینده چالش های این چنینی را توسعه برنامه های تحت وب یا شبکه را بررسی خواهیم کرد.

درباره ما

ترجنس | thregence.ir
آکادمی ترجنس | edu.thregence.ir
دوره‌های آکادمی ترجنس | courses.thregence.ir
اینستاگرام | instagram.com/thregence
تلگرام | t.me/thregence
یوتوب | https://bit.ly/30mGowo
آپارات | aparat.com/thregence

ارسال یک پاسخ