ساخت لینک یکبار مصرف در php

  • آپدیت شده در تاریخ

ساخت لینک یکبار مصرف در php

ساخت لینک یکبار مصرف در php برای فروش محصولات دانلودی ، لینک های فعال سازی اکانت کاربری ، و یا دسترسی به یک سری فایل های خاص برای کاربران بصورت لینک های زمان دار و یا نامحدود ، استفاده می شود . در این آموزش به شما نحوه ساخت لینک یکبار مصرف در php و همچنین تعیین مدت زمان انقضا را به شما نشان می دهیم .

 

ساخت لینک یکبار مصرف

فرض کنید سیستم مدیریت محتوایی دارید که اطلاعات مربوط به هر کاربر را در یک سطر از جدول دیتابیس ذخیره می کند .بعد از ثبت نام ، کاربر یک ایمیل فعال سازی همراه با لینک یکبار مصرف برای اکانت خود دریافت می کند . با این آدرس URL یکبار مصرف که شامل پارامتر token است می توانیم کاربران را از هم تشخیص بدیم .

لینک یکبار مصرف ما به صورت زیر خواهد بود .

http://example.com/activate?token=ee97780…

مطمینا ، عمل شناسایی کاربر از طریق دیتابیس انجام خواهد شد . بنابراین جدول pending_users را با فیلد های زیر می سازیم . به طور مستقیم برای ساخت جدول می توانید از کد SQL زیر استفاده کنید.

این جدول مقدار نام کاربری ، توکن یکتا ، و مقدار timestamp را ذخیره می کند . از تابع sha1() برای ساخت یک رشته با ۴۰ کاراکتر استفاده می کنیم . مقدار tstamp یک فیلد unsignedعددی است که برای ذخیره زمان ساخت توکن استفاده می شود که البته می توانید برای ساخت مکانیزم زمان انقضا از آن بهره ببریم .

راه های زیادی برای ساخت یک توکن (token) وجود دارد ، امادر اینجا به سادگی از تابع uniqid() و تابع sha1() بهره می بریم . از هر روش دیگری که می خواهید استفاده کنید توجه کنید که باید غیرقابل حدس (random) باشد و احتمال بسیار کمی برای تکراری بودن داشته باشد .

Uniqid یک رشته را دریافت و یک آی دی منحصر به فرد بر اساس رشته و زمان برحسب میکروثانیه ، برگشت می دهد . تابع uniqid همچنین یک مقدار boolean برای ساخت مقدار یکتای دقیق تر دریافت می کند .

تابع sha1 برای محاسبه هش رشته داده شده با الگوریتم US Secure Hash استفاده می شود .

همینکه توابع بالا اجرا شود ، یک رشته ۴۰ کاراکتری منحصر به فرد برای ساخت لینک یکبار مصرف ، ایجاد می کند .ما این مقدار توکس را همراه با یوزرنیم و timestamp در دیتابیس ذخیره میکنیم تا بعدا به آن برای شناسایی ارجاع کنیم .

برای کپی صحیح و کامل کدها ، دابل کلیک کرده تا وارد محیط سفید و کپی شوید در غیر اینصورت امکان دارد اجرای کدها با مشکل روبرو شود

اگر با نحوه اتصال به دیتابیس با pdo در php آشنا نستید ، کلیک کنید

در پروژه های واقعی احتمال دارد شما ID کاربر را در یک جدول دیگر ذخیره کنید و بعدا آنها را بهم JOIN بزنید ، ولی در این مثال من فقط از رشته یوزرنیم استفاده می کنیم .

حالا با اطلاعات بالا ، به راحتی می توانیم لینک یکبار مصرف خود را بسازیم

این URL می تواند به روش هایی در اختیار کاربر قرار می گیرد که در اینجا از ارسال ایمیل در php استفاده می کنیم.

مصرف یک آدرس URL

همینکه لینک یکبار مصرف توسط کاربر اجرا شد ، باید مقدار توکن را از طریق پارامتر token دریافت و آن را با توکن ذخیره شده در دیتابیس مقایسه کنیم . اگر توکن معتبر بود ، می توانید عملیات را انجام بدیم (ارسال فایل به کاربر ، ..) . در این مثال ، ما فعال سازی اکانت کاربر را انجام داده و توکن مورد نظر را منقضی (expire) می کنیم.

می توانیم یک TTL (time to live) را به صورت ۲۴ ساعته برای بررسی timestamp ذخیره شده در جدول مورد نظر اجرا کنیم .

اگر قصد داشته باشیم که url فقط برای ۲۴  ساعت معتبر باشد ، باید از مقدار ۸۶۴۰۰  به ثانیه استفاده کنیم . بنابراین با شرط بالا و مقدار زمان ذخیره شده و ۲۴ ساعت به ثانیه ، معتبر بودن یا نبودن توکن را بررسی می کنیم .

جمع بندی

مثال بالا سناریویی از ارسال لینک فعال سازی برای کاربر بود ، می توانید با ساخت لینک یکبار مصرف در php (OneTime URLs) برای ارایه فایل های دانلودی به کاربر ، همچنین ایجاد محدودیت زمانی برای لینک دانلود استفاده کنید .

همچنین برای بررسی توکن منقضی شده و همچنین حذف آن از جداول دیتابیس ، میتوانید یک اسکریپت جدا برای اینکار بنویسید و آن را را زمان بندی کنید یا اینکه در cron job قرار بدید تا هر چند یک بار اجرا و موارد منقضی شده را از دیتابیس پاک کند .

امیدوارم از آموزش ساخت لینک یکبار مصرف در php در پروژه هایی که می نویسید استفاده کنید و آن را بنابر نیاز خود تغییر و توسعه بدید .

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

هر مشکلی در پیاده سازی این پروژه داشتید ، از قسمت نظرات اقدام کنید . سریعا ، پاسخگوی سوالات شما هستیم .

موفق و پیروز باشید.

حسن شفیعی توسعه دهنده وب و موبایل مدیر سایت علاقه خاصی به برنامه نویسی وب و موبایل دارم و هر روز تلاش می کنم به این حوزه مسلط تر شوم و اطلاعاتم را به شکل کاربردی برای علاقه مندان در وب به اشتراک بگذارم. اگر نیاز به برنامه نویس برای انجام پروژه و نوشتن اسکریپت های سمت وب, اپلیکیشن های اندروید و ios, پیدا کردن راه حل توسعه و غیره داشتید حتما از طریق تماس با ما/ واتساپ/ تلگرام بهم پیام بدید. برایتهیه هاست مطمین و پرسرعت کلیک کنید
مطالب زیر را حتما بخوانید
دیدگاه کاربران (۱۶)

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

  1. whoami ۱۲ خرداد ۱۴۰۱

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

    پاسخ
    1. حسن شفیعی ۱۳ خرداد ۱۴۰۱

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

      پاسخ
  2. محمود رنجبر ۱۸ تیر ۱۴۰۰

    سلام مهندس شفیعی گل من از توکن با مدت زمان معین مثلا یک ساعته برای سیستم فراموشی رمز عبور استفاده کردم ولی میخوام بدونم اگه لینکی که برای کار بر ایمیل میکنیم همیشگی باشه بهتر نیست که هر وقت پسورد رو فراموش کرد استفاده کنه
    این کار مشکل امنیتی داره ؟
    میشه کمی راهنمایی کنید ؟

    پاسخ
    1. حسن شفیعی ۱۹ تیر ۱۴۰۰

      سلام مشکلی نداره

      پاسخ
  3. ابوطالبی ۲۱ اسفند ۱۳۹۸

    سلام و درود

    لطفا با من تماس بگیرید آی دی تلگرام

    پاسخ
    1. حسن شفیعی ۲۱ اسفند ۱۳۹۸

      سلام. لطفا بفرمایید در چه مورد نیاز به راهنمایی دارید ؟
      اگر زیاد خصوصی نیست همینجا بپرسید پاسخ داده می شود.

      پاسخ
  4. مسیح ۷ مهر ۱۳۹۸

    سلام میشه این را با روش mysqli هم انجام دهید؟؟

    پاسخ
    1. حسن شفیعی ۷ مهر ۱۳۹۸

      سلام.
      این آموزش رو دنبال کنیداتصال به دیتابیس با mysqli

      پاسخ
  5. a.h.a ۱۹ تیر ۱۳۹۸

    با سلام چگونه کاری کنم که با refresh (بارگزاری تازه صفحه)کد جدید ساخته نشود وآن کد مخصوص همان کاربر باشد؟

    پاسخ
    1. حسن شفیعی ۱۹ تیر ۱۳۹۸

      سلام. از سیشن می تونید استفاده کنید
      آموزش session
      موفق باشید.

      پاسخ
  6. Mehran ۲۱ مهر ۱۳۹۷

    سلام و خسته نباشید، اگر امکانش هست یک ویدعو آموزشی واسم بزارید که چجوری میتونم لینک یکبار مصرف بسازم، از۰تا ۱۰۰
    و توی این لینک من چطور میتونم فرضا چند فتیلو رو قرار بدم و بصورت پکیج کنم و بزارم برای دانلود

    پاسخ
    1. حسن شفیعی ۲۱ مهر ۱۳۹۷

      سلام ممنون. آموزش کامل ساخت لینک یکبار مصرف برای دانولد فایلها قرار داده شده
      https://netparadis.com/generate-onetime-download-link-php/

      موفق باشید.

      پاسخ
  7. سهیل ۱۸ خرداد ۱۳۹۷

    سلام میشه آموزش ساده تر برای افراد مبتدی بزارید!؟!؟!

    پاسخ
    1. حسن شفیعی ۱۹ خرداد ۱۳۹۷

      سلام . بله بفرمایید از این آموزش ویدیویی استفاده کنید
      https://netparadis.com/generate-onetime-download-link-php
      موفق باشید.

      پاسخ
  8. پوریا ۳۱ اردیبهشت ۱۳۹۷

    با سلام و درود
    اگر از این روش بخواهیم برای لینک دانلود استفاده کنیم آیا به مشکلات زیر برخورد میکنم.
    ۱ – حجم فایل ها زیاد باشه مثلا بین ۱ تا ۵ گیگ و مثلا روزانه ۱۰۰ نفر هم زمان در خواست دانلود بدن . سرور یا حافظه php کم نمیاره؟
    ۲ – با این روش کاربر تحت هر شرایطی نمیتواند لینک مستقیم فایل را پیدا کند؟
    ۳ – برای کاربر بهینه تر از چه سیستم عاملی با چه سخت افزاری استفاده میشه کرد؟
    ۴ – آیا در این روشی که شما گفتین امکان کد نویسی بهینه تری هست؟
    پیشاپیش سپاسگذارم بابت جوابگویتون و آموزش مفیدتون

    پاسخ
    1. حسن شفیعی ۳۱ اردیبهشت ۱۳۹۷

      سلام . جواب سوالات شما و روش بهینه و مناسب در این ویدیوی آموزشی قرار داره .
      https://netparadis.com/generate-onetime-download-link-php
      موفق باشید.

      پاسخ
دوره های آموزشی