2010-01-06 45 views
6

Tôi làm cách nào để kiểm tra xem email có tồn tại không? Không thể hiểu cách các trang web gửi thư bằng một liên kết duy nhất mà người dùng nhấp để xác thực rằng ông là chủ sở hữu của email =/Gửi email kích hoạt tới người dùng

Tạo 2 cột mới có tên là activationkey và kích hoạt và lưu trữ một số chuỗi ngẫu nhiên, gửi email với khóa kích hoạt và cập nhật người dùng đã kích hoạt = 1 khớp với liên kết kích hoạt đó

register.php?a=activate&key=9cdfb439c7876e703e307864c9167a15 

Bạn có ý tưởng nào tốt hơn không?

Trả lời

16

Tôi thường gửi liên kết chứa userid và khóa kích hoạt. Khi họ truy cập kịch bản kích hoạt của tôi, nếu tôi tìm thấy một trận đấu, tôi kích hoạt chúng.

Khi đăng ký, tôi sẽ tạo 32 ký tự chữ hoa và chữ thường và đặt nó làm khóa kích hoạt. Tại thời điểm này, bạn có thể tạo một trường có tên là 'đã kích hoạt' hoặc bạn có thể giả định rằng người dùng không được kích hoạt nếu họ có khóa kích hoạt.

 
uid |  email  | key 
------------------------------------------------------------ 
001 | [email protected] | e09141f3f5a17fed6222fc0279b9afdf 
------------------------------------------------------------ 
002 | [email protected] | 
------------------------------------------------------------ 

Khi người dùng truy cập các tập lệnh kích hoạt, chỉ cần kiểm tra các phím được cung cấp cùng với các id cung cấp và nếu kết hợp được tìm thấy, xóa phím từ hồ sơ người dùng trong hồ sơ (hoặc cập nhật boolean của bạn 'kích hoạt' và mở cửa ra.

Nếu địa chỉ email được cung cấp không tồn tại, không bị mất. Bạn có thể xóa tất cả các hàng bằng các khóa sau một tháng không hoạt động.

+0

đẹp! cảm ơn rất nhiều! btw để tạo ra một khóa nào bạn nghĩ md5 (uniqid()); sẽ ổn thôi? không muốn 2 người dùng có cùng khóa: P – Martin

+1

md5 của cùng một uniqid sẽ vẫn giống nhau - bạn chỉ có thể sử dụng tiền tố (có thể là md5 email của họ) cho uniqid hoặc sử dụng cờ 'entropy' nhiều hơn của id uniq – eCaroth

+2

thông minh . nghĩ rằng tôi sẽ đi với md5 (email); thx – Martin

0

Không có cách nào dễ dàng để kiểm tra xem email có thực sự tồn tại theo chương trình hay không. Có một số cách (ping mailserver, vv) nhưng không có cách nào được chứng minh là hoạt động với mọi thiết lập của mailserver. Buộc người dùng kích hoạt tài khoản của họ thông qua liên kết như bạn đã mô tả là cách tốt nhất để thực hiện điều đó. Ngoài ra, bạn có thể muốn có một số loại kịch bản định kỳ như cron-job để loại bỏ các thành viên không kích hoạt sau một khoảng thời gian nhất định (yêu cầu cột khác trong bảng của bạn, dấu thời gian).

Điều này rất hữu ích vì nếu người dùng đăng ký nhưng không bao giờ kích hoạt tài khoản và xóa email và bạn đang sử dụng email của họ làm id (chỉ là ví dụ), họ sẽ không bao giờ có thể hoàn thành việc kích hoạt. Hoặc, nếu họ cố gắng đăng nhập, bạn có thể chỉ cần gửi lại email kích hoạt đến địa chỉ đó một lần nữa.

Chỉ cần đảm bảo trong email bạn chỉ định tất cả các tiêu đề (trả lời, từ, v.v.) để email của bạn không bị gắn cờ là spam.

+0

Phương pháp kiểm tra này nếu một email tồn tại không phải là dễ dàng. Nó không đảm bảo email thuộc về người dùng. Có các dịch vụ thư dùng một lần, nơi bạn nhận được một địa chỉ email tạm thời. Người dùng có thể sử dụng một trong các dịch vụ đó, kích hoạt tài khoản của họ và đăng nhập vào hệ thống.Sau một thời gian, địa chỉ tạm thời bị tắt. –

2

Một thay thế cho khóa kích hoạt là chỉ gửi mật khẩu được tạo tới email người dùng, nếu người dùng đăng nhập, người đó được kích hoạt (và dĩ nhiên, bạn có thể thay đổi mật khẩu thành những gì mình thích).

Các vấn đề liên quan