Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

MySQL làm thế nào để làm cho giá trị hết hạn?

Bên cạnh resetkey của bạn cột đặt một DATETIME cột được gọi, có thể, expires .

Sau đó, bất cứ khi nào bạn chèn một khóa đặt lại mới, cũng hãy chèn một giá trị vào hết hạn:

INSERT INTO forgot (resetkey, expires) VALUES (whatever, NOW() + INTERVAL 48 HOUR)

Ngay trước khi bạn đọc bất kỳ khóa đặt lại nào từ bảng, hãy thực hiện việc này:

DELETE FROM forgot WHERE expires < NOW()

Sau đó, bạn sẽ không bao giờ thấy một khóa hết hạn; chúng sẽ luôn bị xóa sổ nếu chúng đã hết hạn.

Bây giờ, bạn có thể chọn làm điều gì đó với việc tra cứu khóa đặt lại do người dùng trang bị. Nếu nó đã hết hạn, bạn có thể thông báo điều đó cho người dùng:"Khóa đặt lại của bạn đã hết hạn." Nhưng đó là một ý tưởng tồi ... vì lợi ích bảo mật, bạn không nên giúp người dùng hiểu tại sao mã thông báo bảo mật như khóa đặt lại không hợp lệ. Bạn chỉ nên nói "khóa đặt lại đó không đúng".

Điều này có để ngỏ khả năng một số hàng chứa mã thông báo hết hạn sẽ vẫn tồn tại trong bảng không? Đúng. Nhưng ứng dụng của bạn sẽ không thể thực sự đọc và sử dụng chúng nếu bạn làm theo quy trình xóa sạch những cái đã hết hạn trước khi sử dụng bất kỳ mã thông báo nào. Nếu bạn có lý do để tránh giữ các mã thông báo đã hết hạn trong bảng mặc dù chúng vô dụng, bạn có thể thiết lập SỰ KIỆN hoặc một số loại công việc được lên lịch thường xuyên khác để chạy DELETE tuyên bố tôi đã đề cập.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Ứng dụng Android có thể kết nối trực tiếp với cơ sở dữ liệu mysql trực tuyến không

  2. Tạo người dùng MySQL trên Linux qua Dòng lệnh

  3. MySQL / MariaDB - sắp xếp theo truy vấn con bên trong

  4. com.mysql.jdbc.exceptions.jdbc4.CommunicationsException:Lỗi liên kết truyền thông

  5. Chỉ cập nhật Thời gian trong trường DateTime mysql