URL satu kali (OTU) adalah alamat web sementara yang direka untuk kegunaan tunggal. Ini sesuai untuk akses selamat ke fail atau sumber, sering digunakan dalam senario seperti pengesahan akaun atau akses terhad masa. Artikel ini memperincikan generasi, pelaksanaan, dan tamat tempoh OTU menggunakan php.
Konsep Utama:
sha1()
berfungsi untuk mewujudkan token yang tidak dapat diramalkan, unik untuk setiap OTU, meminimumkan risiko perlanggaran. uniqid()
Bayangkan sistem pendaftaran pengguna. Selepas mendaftar, e -mel pengesahan yang mengandungi OTU dihantar untuk mengaktifkan akaun. Format OTU akan menjadi:
http://example.com/activate?token=ee97780...
Maklumat OTU disimpan dalam jadual pangkalan data:
CREATE TABLE pending_users ( token CHAR(40) NOT NULL, username VARCHAR(45) NOT NULL, tstamp INTEGER UNSIGNED NOT NULL, PRIMARY KEY(token) );
<?php $token = sha1(uniqid($username, true)); ?>
hashes ke dalam rentetan 40 aksara untuk token. uniqid()
sha1()
Token, Nama Pengguna, dan Timestamp disimpan untuk pengesahan kemudian.
<?php $query = $db->prepare("INSERT INTO pending_users (username, token, tstamp) VALUES (?, ?, ?)"); $query->execute(array($username, $token, $_SERVER["REQUEST_TIME"])); ?>
url construction (php):
ini mencipta OTU.
<?php $url = "http://example.com/activate.php?token=$token"; ?>
Pemberitahuan e -mel (php):
OTU dihantar kepada pengguna melalui e -mel.
<?php $message = "Thank you for signing up! Activate your account: $url"; mail($address, "Account Activation", $message); ?>
memproses url satu kali (activate.php):
skrip ini mengesahkan dan memproses OTU:
Skrip ini mengambil token, mengesahkannya terhadap pangkalan data, melakukan pengaktifan akaun, dan kemudian memadamkan token untuk mengelakkan penggunaan semula.
<?php // Retrieve token $token = isset($_GET["token"]) && preg_match('/^[0-9A-F]{40}$/i', $_GET["token"]) ? $_GET["token"] : throw new Exception("Invalid token."); // Verify token $query = $db->prepare("SELECT username, tstamp FROM pending_users WHERE token = ?"); $query->execute(array($token)); $row = $query->fetch(PDO::FETCH_ASSOC); $query->closeCursor(); if (!$row) { throw new Exception("Invalid token."); } extract($row); // Account activation logic... // Delete token $query = $db->prepare("DELETE FROM pending_users WHERE username = ? AND token = ? AND tstamp = ?"); $query->execute(array($username, $token, $tstamp)); ?>
Menambah TTL:
Ini menambah pemeriksaan tamat tempoh 24 jam.
<?php $delta = 86400; // 24 hours in seconds if ($_SERVER["REQUEST_TIME"] - $tstamp > $delta) { throw new Exception("Token expired."); } // ...rest of the code... ?>
Kesimpulan:
URL satu kali menyediakan mekanisme yang mantap untuk akses yang selamat dan guna. Pendekatan ini, digabungkan dengan pengurusan pangkalan data dan amalan keselamatan yang betul, memastikan sistem yang selamat dan boleh dipercayai. Ingatlah untuk melaksanakan pengendalian ralat dan sanitisasi input untuk penyelesaian siap pengeluaran. Pertimbangkan untuk menambah skrip pembersihan untuk menghapuskan token yang telah tamat tempoh dari pangkalan data.
Atas ialah kandungan terperinci PHP Master | Menjana URL Penggunaan Satu Masa. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!