目次
PHP会員パスワード取得機能実装事例紹介、PHPパスワード取得
ホームページ バックエンド開発 PHPチュートリアル PHPメンバーパスワード取得機能実装例紹介、PHPパスワード取得_PHPチュートリアル

PHPメンバーパスワード取得機能実装例紹介、PHPパスワード取得_PHPチュートリアル

Jul 13, 2016 am 10:13 AM
php

PHP会員パスワード取得機能実装事例紹介、PHPパスワード取得

設定アイデア

1. ユーザーは登録時に電子メールを提供する必要があります。その目的は、この電子メールを使用してパスワードを取得することです。

2. ユーザーがパスワードまたはユーザー名を忘れた場合は、ログイン ページの [パスワードを取得] ハイパーリンクをクリックしてフォームを開き、登録に使用したメール アドレスを入力して送信します。

3. システムはメールボックスを通じてデータベースからユーザー情報を検索し、ユーザーのパスワードを一時パスワード (例: 12345678) に更新します。

4. システムは、Jmail 機能を使用して、ユーザーの情報をユーザーのメールボックスに送信します (内容には、ユーザー名、一時パスワード、およびユーザーに一時パスワードの変更を促すメッセージが含まれます)。

5. ユーザーは一時パスワードを使用してログインできます。


HTML

パスワード取得ページに、登録に使用した電子メール アドレスを入力することをユーザーに要求するページを配置し、インタラクションを処理するフロントエンド JS を送信します。

次のようにコードをコピーします

登録したメール アドレスを入力してパスワードを取得します:




jQuery

ユーザーがメール アドレスを入力して送信をクリックすると、jQuery はまずメールの形式が正しいかどうかを確認し、正しい場合は、sendmail.php に Ajax リクエストを送信します。が存在し、メールを送信すると、対応する処理が返されます。結果はフロントページに表示されます。jQuery コードを参照してください:

コードは以下のようにコピーされます
$(function(){
$("#sub_btn").click(function(){
var email = $("#email").val();
var preg = / ^w+ ([-+.]w+)*@w+([-.]w+)*.w+([-.]w+)*/; //メール
と一致 if(email=='' || !preg. test( email)){
$("#chkmsg").html("正しいメールアドレスを入力してください!");
}else{
$("#sub_btn").attr("disabled","disabled ").val ('送信中..').css("cursor","default");
$.post("sendmail.php",{mail:email},function(msg){
if(msg= ="noreg "){
$("#chkmsg").html("このメール アドレスはまだ登録されていません!");
$("#sub_btn").removeAttr("disabled").val('送信').css("カーソル ","ポインター");
}else{
$(".demo").html("

"+msg+"

"); );
}
}) ;
上記で使用されている jQuery コードは、フロントエンドの対話型操作を完了するのに非常に便利で簡潔です。ある程度の jQuery の基礎がある場合、上記のコードは一目瞭然であり、多くの説明は必要ありません。

もちろん、ページに jQuery ライブラリ ファイルをロードすることを忘れないでください。www.111cn.net からダウンロードしたデモが使用できないのは、その 80% が jquery のロード パスに原因があるとよく尋ねられる学生がいます。または他のファイルが間違っているため、必要なファイルが読み込まれていません。
PHP

sendmail.php は、電子メールがシステムのユーザー テーブルに存在するかどうかを確認する必要があります。存在する場合は、ユーザー情報を読み取り、md5 を使用してユーザー ID、ユーザー名、パスワードを暗号化し、パスワードを取得するための検証コードとして特別な文字列を生成します。次に URL を構築します。同時に、URL リンクの適時性を制御するために、ユーザーがパスワード取得アクションを送信したときに操作時間を記録し、最後に電子メール送信クラスを呼び出してユーザーのメールボックスに電子メールを送信します。 class smtp.class.php がパッケージ化されていますのでダウンロードしてください。

次のようにコードをコピーします
include_once("connect.php");//データベースに接続します

$email =tripslashes(trim($_POST['mail']));

$sql = "select id, `t_user` からのユーザー名、パスワード (`email`='$email'";
$query = mysql_query($sql);
$num = mysql_num_rows($query);
if($num==0){//このメールアドレスはまだ登録されていません。
echo 'noreg';
}else{
$row = mysql_fetch_array($query);
$uid = $row['id']; uid.$row['username'].$row['password']);//結合された検証コード
$url = "/demo/resetpass/reset.php?email=".$email."
&token=" .$token;// URL を構築します
$time = date('Y-m-d H:i');
$result = sendmail($time,$email,$url);
if($result==1);メールは正常に送信されました
$msg = 'システムはあなたのメール アドレスにメールを送信しました
パスワードをリセットするには、メール アドレスにログインしてください。 ';
//データ送信時刻を更新します
mysql_query("update `t_user` set `getpasstime`='$getpasstime' where id='$uid '");
$msg = $result; echo $msg;

//メールを送信
function sendmail($time,$email,$url){
include_once("smtp.class.php")
$smtpserver = ""; smtp.163.com など
$smtpserverport = 25; //SMTP サーバーのポート
$smtpusermail = ""; //SMTP サーバーのユーザーの電子メール
$smtpuser = "" //SMTP サーバーのユーザー アカウント
$smtppass = " ; //SMTP サーバーのユーザー パスワード
$smtp = new Smtp($smtpserver, $smtpserverport, true, $smtpuser, $smtppass); // ここで true は認証が使用されることを意味し、それ以外の場合は認証が使用されません。
$emailtype = "HTML"; //メールの種類、テキスト: テキスト;
$smtpemailto = $email;
$emailsubject = "www.111cn.net - パスワードの取得" ;
$emailbody = "Dear ".$email.":
".$time." にパスワード取得リクエストを送信しました。パスワードをリセットするには、下のリンクをクリックしてください
(ボタンは 24 時間以内に有効です) .
".$url."";
$rs = $smtp-> ;sendmail ($smtpemailto、$smtpemailfrom、$emailsubject、$emailbody、$emailtype);

$rs を返す
この時点で、helloweba からパスワード取得メールが届きます。メールの内容に www.111cn.net の reset.php への URL リンクをクリックして、メールを確認してください。

次のようにコードをコピーします
include_once("connect.php");//データベースに接続します

$token =tripslashes(trim($_GET['token']));
$email =tripslashes(trim($) _GET[' email']));
$sql = "select * from `t_user` where email='$email'";
$query = mysql_query($sql);
if( $row){
$mt = md5($row['id'].$row['username'].$row['password']);

if($mt==$token){

if(time ()-$row['getpasstime']>24*60*60){

$msg = 'このリンクは期限切れです! ';

}else{
//パスワードをリセット...
$msg = 'パスワードをリセットして、パスワードのリセットフォームを表示してください。
これは単なるデモンストレーションですので、飛ばしてください。 ';
}
}else{
$msg = '無効なリンク';
}
}else{
$msg = '不正なリンクです! ';
}
エコー$msg;


reset.php は、まずパラメータ email と token を受け取り、次に email に基づいてデータテーブル t_user に電子メールが存在するかどうかをクエリし、存在する場合はユーザーの情報を取得し、トークンと同じ方法でトークン値を構築します。 sendmail.php の組み合わせを使用して、URL によって渡されたトークンを比較します。現在の時刻と電子メールの送信時刻の差が 24 時間以上ある場合は、「リンクの有効期限が切れています!」というメッセージが表示されます。 、リンクが有効であることを意味し、最後にユーザーが新しいパスワードを設定したページに移動します。

概要: この記事の登録メール認証とメール経由のパスワード取得を通じて、Web サイト開発におけるメール送信の用途とその重要性がわかりました。もちろん、現在では SMS 認証アプリケーションも人気があり、これには関連する SMS インターフェイスのドッキングが必要です。

最後に、データテーブル t_user 構造体をアタッチします。

コードは以下のようにコピーされます
CREATE TABLE `t_user` (
`id` int(11) NOT NULL auto_increment,
`username` varchar(30) NOT NULL,
`password` varchar(32) NOT NULL,
` email` varchar(50) NOT NULL、
`getpasstime` int(10) NOT NULL、

主キー (`id`)

) ENGINE=MyISAM DEFAULT CHARSET=utf8;

smtp.class.php クラスファイル

コードは次のとおりです コードをコピーします


クラスSMTP{

/* パブリック変数 */

var $smtp_port;

var $time_out;

var $host_name;

var $log_file;


var $relay_host;

var $debug;

var $auth;

var $user;

var $pass;

/* プライベート変数 */
var $sock;

/* コンストラクター */

function smtp($relay_host = "", $smtp_port = 25, $auth = false, $user, $pass) {
$this->debug = false;

$this->smtp_port = $smtp_port;

$this->relay_host = $relay_host;

$this->time_out = 30; // fsockopen() で使用されます

$this->auth = $auth; //認証

$this->user = $user;

$this->pass = $pass;

$this->host_name = "ローカルホスト"; //HELO コマンドで使用されます
$this->log_file = "";

$this->sock = false;
}

/* メイン関数 */

function sendmail($to, $from, $subject = "", $body = "", $mailtype, $cc = "", $bcc = "", $Additional_headers = "") {
$mail_from = $this ->get_address($this->strip_comment($from));

$body = ereg_replace("(^|(rn))(.)", "1.3", $body);

$header .= "MIME バージョン:1.0rn";

if ($mailtype == "HTML") {
$header .= "Content-Type:text/htmlrn";
}

$header .= "宛先: " . $to 。 「ん」;

if ($cc != "") {
$header .= "Cc: " . $cc 。 "rn";
}

$header .= "From(www.111cn.net): $from<" 。 $から。 ">rn";

$header .= "件名: " . $subject 。 「ん」;

$header .= $Additional_headers;

$header .= "日付: " . date("r") 。 「ん」;

$header .= "X-Mailer:By Redhat (PHP/" . phpversion() . ")rn";

list ($msec, $sec) =explode(" ", microtime());

$header .= "メッセージ ID: <" 。 date("YmdHis", $sec) 。 「。」 。 ($msec * 1000000) 。 「。」 。 $mail_from 。 ">rn";

$TO =explode(",", $this->strip_comment($to));

if ($cc != "") {
$TO = array_merge($TO,explode(",", $this->strip_comment($cc)));
}

if ($bcc != "") {
$TO = array_merge($TO,explode(",", $this->strip_comment($bcc)));
}

$sent = true;

foreach ($TO as $rcpt_to) {
$rcpt_to = $this->get_address($rcpt_to);

if (!$this->smtp_sockopen($rcpt_to)) {
$this->log_write("エラー: " . $rcpt_to . "n" に電子メールを送信できません");

$sent = false;

続行;
}

if ($this->smtp_send($this->host_name, $mail_from, $rcpt_to, $header, $body)) {
$this->log_write("電子メールは < に送信されました。" . $rcpt_to . ">n");
} else {
$this->log_write("エラー: < にメールを送信できません。" . $rcpt_to . ">n");

$sent = false;
}

fclose($this->靴下);

$this->log_write("リモート ホストn から切断されました");
}

$sent を返す;
}

/* プライベート関数 */

function smtp_send($helo, $from, $to, $header, $body = "") {
if (!$this->smtp_putcmd("HELO", $helo)) {
return $this-> smtp_error("HELO コマンドを送信中");
}
// auth
if ($this->auth) {
if (!$this->smtp_putcmd("AUTH LOGIN", Base64_encode($this->user) ))) {
return $this->smtp_error("sending HELO command");
}

if (!$this->smtp_putcmd("",base64_encode($this->pass))) {
return $this->smtp_error("HELO コマンドの送信中");
}
}

if (!$this->smtp_putcmd("MAIL", "FROM:<" . $from . ">")) {
return $this->smtp_error("sending MAIL FROM command");
}

if (!$this->smtp_putcmd("RCPT", "TO:<" . $to . ">")) {
return $this->smtp_error("RCPT TO コマンドの送信");
}

if (!$this->smtp_putcmd("DATA")) {
return $this->smtp_error("DATA コマンドの送信");
}

if (!$this->smtp_message($header, $body)) {
return $this->smtp_error("送信メッセージ");
}

if (!$this->smtp_eom()) {
return $this->smtp_error("を送信中。 [EOM]");
}

if (!$this->smtp_putcmd("QUIT")) {
return $this->smtp_error("sending QUIT command");
}

true を返す;
}

function smtp_sockopen($address) {
if ($this->relay_host == "") {
return $this->smtp_sockopen_mx($address);
} else {
return $this->smtp_sockopen_relay() ;
}
}

function smtp_sockopen_relay() {
$this->log_write("Trying to " . $this->relay_host . ":" . $this->smtp_port . "n");

$this->sock = @ fsockopen($this->relay_host, $this->smtp_port, $errno, $errstr, $this->time_out);

if (!($this->sock && $this->smtp_ok​​())) {
$this->log_write("エラー: リレー ホスト " . $this->relay_host . "n に接続できません");

$this->log_write("エラー: " . $errstr . " (" . $errno . ")n");

false を返す;
}

$this->log_write("リレー ホストに接続しました " . $this->relay_host . "n");

true を返す;
;
}

function smtp_sockopen_mx($address) {
$domain = ereg_replace("^.+@([^@]+)$", "1", $address);

if (!@ getmxrr($domain, $MXHOSTS)) {
$this->log_write("エラー: MX を解決できません "" . $domain . ""n");

false を返す;
}

foreach ($MXHOSTS as $host) {
$this->log_write("Trying to " . $host . ":" . $this->smtp_port . "n");

$this->sock = @ fsockopen($host, $this->smtp_port, $errno, $errstr, $this->time_out);

if (!($this->sock && $this->smtp_ok​​())) {
$this->log_write("警告: mx ホストに接続できません " . $host . "n");

$this->log_write("エラー: " . $errstr . " (" . $errno . ")n");

続行;
}

$this->log_write("MX ホストに接続しました " . $host . "n");

true を返す;
}

$this->log_write("エラー: どの mx ホストにも接続できません (" . implode(", ", $MXHOSTS) . ")n");

false を返す;
}

function smtp_message($header, $body) {
fputs($this->sock, $header . "rn" . $body);

$this->smtp_debug(">gt; " . str_replace("rn", "n" . ">> ", $header . "n>" . $body . "n> "));

true を返す;
}

関数 smtp_eom() {
fputs($this->sock, "rn.rn");

$this->smtp_debug(".[EOM]n");

return $this->smtp_ok​​();
}

関数 smtp_ok​​() {
$response = str_replace("rn", "", fgets($this->sock, 512));

$this->smtp_debug($response . "n");

if (!ereg("^[23]", $response)) {
fputs($this->sock, "QUITrn");

fgets($this->sock, 512);

$this->log_write("エラー: リモート ホストが "" . $response . ""n");

false を返す;
}

true を返す;
}

function smtp_putcmd($cmd, $arg = "") {
if ($arg != "") {
if ($cmd == "")
$cmd = $arg;

else
$cmd = $cmd 。 「」。 $arg;
}

fputs($this->sock, $cmd . "rn");

$this->smtp_debug(">gt; " . $cmd . "n");

return $this->smtp_ok​​();
}

function smtp_error($string) {
$this->log_write("エラー: " . $string . ".n" 中にエラーが発生しました");

false を返す;
}

関数 log_write($message) {
$this->smtp_debug($message);

if ($this->log_file == "") {
return true;
}

$message = date("M d H:i:s ") . get_current_user() 。 「[」。 getmypid() 。 "]: " 。 $メッセージ;

if (!@ file_exists($this->log_file) || !($fp = @ fopen($this->log_file, "a"))) {
$this->smtp_debug("警告: できませんログ ファイル "" を開きます。 $this->log_file . ""n");

false を返す;
;
}

群れ($fp, LOCK_EX);

fputs($fp, $message);

fclose($fp);

true を返す;
}

関数strip_comment($address) {
$comment = "([^()]*)";

while (ereg($comment, $address)) {
$address = ereg_replace($comment, "", $address);
}

$アドレスを返す;
}

function get_address($address) {
$address = ereg_replace("([ trn])+", "", $address);

$address = ereg_replace("^.*<(.+)>.*$", "1", $address);

$アドレスを返す;
}

function smtp_debug($message) {
if ($this->debug) {
echo $message . "
;";
}
}
}
?>

最後の面には、这里不介绍了大家可百本站找相关的データ库接mysql类哦
from:http://www.111cn.net/phper/php/54606.htm

www.bkjia.comtru​​ehttp://www.bkjia.com/PHPjc/917485.html技術記事 PHP は暗号を返す機能の実装例、php は暗号を設定する思考回路 1、ユーザーが登録するときに電子メール ボックスを提供する必要があります。その目的は、そのボックスで暗号を取得することです。
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

Video Face Swap

Video Face Swap

完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

Ubuntu および Debian 用の PHP 8.4 インストールおよびアップグレード ガイド Ubuntu および Debian 用の PHP 8.4 インストールおよびアップグレード ガイド Dec 24, 2024 pm 04:42 PM

PHP 8.4 では、いくつかの新機能、セキュリティの改善、パフォーマンスの改善が行われ、かなりの量の機能の非推奨と削除が行われています。 このガイドでは、Ubuntu、Debian、またはその派生版に PHP 8.4 をインストールする方法、または PHP 8.4 にアップグレードする方法について説明します。

今まで知らなかったことを後悔している 7 つの PHP 関数 今まで知らなかったことを後悔している 7 つの PHP 関数 Nov 13, 2024 am 09:42 AM

あなたが経験豊富な PHP 開発者であれば、すでにそこにいて、すでにそれを行っていると感じているかもしれません。あなたは、運用を達成するために、かなりの数のアプリケーションを開発し、数百万行のコードをデバッグし、大量のスクリプトを微調整してきました。

PHP 開発用に Visual Studio Code (VS Code) をセットアップする方法 PHP 開発用に Visual Studio Code (VS Code) をセットアップする方法 Dec 20, 2024 am 11:31 AM

Visual Studio Code (VS Code とも呼ばれる) は、すべての主要なオペレーティング システムで利用できる無料のソース コード エディター (統合開発環境 (IDE)) です。 多くのプログラミング言語の拡張機能の大規模なコレクションを備えた VS Code は、

JSON Web Tokens(JWT)とPHP APIでのユースケースを説明してください。 JSON Web Tokens(JWT)とPHP APIでのユースケースを説明してください。 Apr 05, 2025 am 12:04 AM

JWTは、JSONに基づくオープン標準であり、主にアイデンティティ認証と情報交換のために、当事者間で情報を安全に送信するために使用されます。 1。JWTは、ヘッダー、ペイロード、署名の3つの部分で構成されています。 2。JWTの実用的な原則には、JWTの生成、JWTの検証、ペイロードの解析という3つのステップが含まれます。 3. PHPでの認証にJWTを使用する場合、JWTを生成および検証でき、ユーザーの役割と許可情報を高度な使用に含めることができます。 4.一般的なエラーには、署名検証障害、トークンの有効期限、およびペイロードが大きくなります。デバッグスキルには、デバッグツールの使用とロギングが含まれます。 5.パフォーマンスの最適化とベストプラクティスには、適切な署名アルゴリズムの使用、有効期間を合理的に設定することが含まれます。

PHPでHTML/XMLを解析および処理するにはどうすればよいですか? PHPでHTML/XMLを解析および処理するにはどうすればよいですか? Feb 07, 2025 am 11:57 AM

このチュートリアルでは、PHPを使用してXMLドキュメントを効率的に処理する方法を示しています。 XML(拡張可能なマークアップ言語)は、人間の読みやすさとマシン解析の両方に合わせて設計された多用途のテキストベースのマークアップ言語です。一般的にデータストレージに使用されます

母音を文字列にカウントするPHPプログラム 母音を文字列にカウントするPHPプログラム Feb 07, 2025 pm 12:12 PM

文字列は、文字、数字、シンボルを含む一連の文字です。このチュートリアルでは、さまざまな方法を使用してPHPの特定の文字列内の母音の数を計算する方法を学びます。英語の母音は、a、e、i、o、u、そしてそれらは大文字または小文字である可能性があります。 母音とは何ですか? 母音は、特定の発音を表すアルファベットのある文字です。大文字と小文字など、英語には5つの母音があります。 a、e、i、o、u 例1 入力:string = "tutorialspoint" 出力:6 説明する 文字列「TutorialSpoint」の母音は、u、o、i、a、o、iです。合計で6元があります

PHPでの後期静的結合を説明します(静的::)。 PHPでの後期静的結合を説明します(静的::)。 Apr 03, 2025 am 12:04 AM

静的結合(静的::) PHPで後期静的結合(LSB)を実装し、クラスを定義するのではなく、静的コンテキストで呼び出しクラスを参照できるようにします。 1)解析プロセスは実行時に実行されます。2)継承関係のコールクラスを検索します。3)パフォーマンスオーバーヘッドをもたらす可能性があります。

PHPマジックメソッド(__construct、__destruct、__call、__get、__setなど)とは何ですか? PHPマジックメソッド(__construct、__destruct、__call、__get、__setなど)とは何ですか? Apr 03, 2025 am 12:03 AM

PHPの魔法の方法は何ですか? PHPの魔法の方法には次のものが含まれます。1。\ _ \ _コンストラクト、オブジェクトの初期化に使用されます。 2。\ _ \ _リソースのクリーンアップに使用される破壊。 3。\ _ \ _呼び出し、存在しないメソッド呼び出しを処理します。 4。\ _ \ _ get、dynamic属性アクセスを実装します。 5。\ _ \ _セット、動的属性設定を実装します。これらの方法は、特定の状況で自動的に呼び出され、コードの柔軟性と効率を向上させます。

See all articles