🚀 تخفیف ۳۵٪ + ۳.۵ میلیون هدیه! برنامه‌نویسی رو الان شروع کن - فقط امروز!
۰ ثانیه
۰ دقیقه
۰ ساعت
۳ فرداد مریدی
ارسال مجدد اطلاعات در متد POST و GET
جامعه پی اچ پی ایجاد شده در ۱۹ مرداد ۱۴۰۲

سلام

این سوال مربوط به این بخش نیست ولی سوالی هست که توی ذهنم بی جواب مونده.

چرا وقتی که کاربر form که در یک صفحه هست رو پر میکنه و با action مثلا بر میگرده به همون صفحه فرم (در واقع اطلاعات برمیگرده به همون صفحه ای که form داخلش هست) اگر کاربر بعد از ارسال فرم مجدد صفحه رو رفرش کنه اطلاعات فرم مجدد ارسال میشه؟

آیا راه حلی هست وقتی یکبار فرم پر شد و اطلاعات اومد توی صفحه با رفرش صفحه توسط کاربر فرم مجدد ارسال نشه. یعنی کلا unset بشه؟

سلام،

موضوع اولی که گفتید فرم برمیگرده اصطلاحا PostBack میگن و تفاوتی نمیکنه که پست بک بشه یا به صفحه ای دیگه فرم ارسال بشه.

مرورگرو وقتی رفرش میکنید آخرین درخواست http رو تکرار میکنه و وقتی فرم ارسال شده باشه عمل Double Submission انجام میشه و از کاربر سؤال میپرسه.

برای جلوگیری ازین موضوع راهی که دارید:

الگوی PRG:

استفاده از الگوی Post/Redirect/Get یا PRG است.

وقتی در سمت سرور فرم رو پردازش کردید در نهایت برای نشان دادن صفحه مجدد صفحه را ریدایرکت کنید به یک url که این آدرس میتونه همان صفحه باشه یعنی عمل رفرش رو با ریدایرکت انجام بدید. کد وضعیت 303 استفاده کنید.

عمل ریدایرکت با کد وضعیت 303 باعث میشه با یک درخواست جدید GET سروکار داشته باشید و صفحه هم رفرش بشه درخواست GET در سابقه مرورگر بعنوان آخرین درخواست وجود داره و داده‌های POST فرم روی مرورگر وجود نخواهد داشت.


if(isset($_POST['username'])) {
    // data processing ...
    
    header("Location: success.php", true, 303);
    exit();
}


استفاده از توکن:

میتونید از توکن یکبار مصرف استفاده کنید و چک شود که توکن معتبر است یا خیر. البته این راه از Double Submission جلوگیری نمیکنه بلکه از پردازش مجدد سمت سرور جلوگیری میکنه.

بهترین پاسخ
محسن موحد ۱۹ مرداد ۱۴۰۲، ۲۳:۳۳

یک دنیا ممنون از جواب جامع و کامل شما

فرداد مریدی ۲۱ مرداد ۱۴۰۲، ۰۹:۳۲