Chi mà phức tạp vậy nè. Đơn giản là bạn sinh ra một mã ngẫu nhiên có độ dài cũng nên ngẫu nhiên luôn (dài từ 10 đến 15 ký tự chẳng hạn). Sau đó ghi nó vào cơ sở dữ liệu & gửi email cái link có kèm mã đó (sau khi đã tìm kiếm trong CSDL xem liệu có vô tình có một mã như vậy còn nằm trong đó không), kèm với một cột ngày giờ hết hạn (kể từ lúc người dùng muốn reset mật khẩu - 24 hoặc 48 tiếng gì đó), khi người dùng click vào link thì tìm lại trong CSDL có khớp email và mã đó không, có còn trong thời hạn 24-48 tiếng không, nếu khớp thì hiển thị cửa sổ cho đặt mật khẩu mới và xóa mã đó trong CSDL để tránh dùng lại thêm lần nào nữa. Nếu không khớp thì thông báo link đã hết hạn, cần điền email để lấy lại link khác. Như vậy, trong một thời điểm, trong CDSL của bạn có chưa tới 20 mã như vậy, vì số người quên mật khẩu tại một thời điểm không nhiều đâu, có gì mà phải lo lắng.
Tạo mã random thì code đầy trên mạng, ví dụ ở đây có hàm nè.