私はいくつかの方法を試しました、私はそれが特殊な文字の問題であることを確認しました。私は手紙/数字だけを含んだ簡単なパスワードの組み合わせを試しました。JavaScript AJAXからPHPにパスワードを送信する正しい方法は何ですか?
私はjQueryの使用を中止して以来、私はpassword_verifyが動作しない問題があったのは初めてです。上記のように、password_verifyに間違いがないことを確認しました。
は、だから、私は、パスワードの入力を取得し、私はこのようなユーザ名とそれに参加する:
var params = null,
paramObj = {};
paramObj['user'] = loginInpUser.value;
paramObj['pass'] = loginInpPass.value;
params = encodeURI('post_params='+JSON.stringify(paramObj));
PHP側では、私はそうのようなPOSTでこれを受け取る:私は確認してなかった
$post_params = json_decode($_POST['post_params'], true);
$user = $post_params['user'];
$pass = $post_params['pass'];
私はクライアント側で送信したものとPHPが取得したものとの一致する値を取得します。彼らは完全に一致し、$ユーザーをエコーし、$は合格...問題の特殊文字は、次のとおりです。私もあなたが連結どのように問題を引き起こす可能性がそこに&でスローするようにしようとしていない
)(#$$%)(
パラメータをXMLHttpRequestで送信する前に
これで、特殊文字が正しく解析されている場合(password_verifyはパスワードとハッシュが一致します)、正しい方法は何ですか?
jQueryを使用しない理由は、ファイルのダウンロード速度を向上させる非同期タグを低くすることでした。
編集:ハッシュと
奇妙なこと:
私はちょうど私が登録フォームを気にしませんでしたので、私はpassword_hashを使用し、ハッシュ関数を作成し、中にそれを挿入し、基本的なログインシステムを必要とdb。私は失敗し
$pass = "password with special chars";
を使用して、エラーが文字列の中に何かが未定義の変数は、(文字列がカットアップされて、私はパースエラーを推測)だったと言うことに気づきました。
$pass = 'password with special chars';
しかし、使用しては、これは大丈夫でした。
https://developer.mozilla。org/en-US/docs/Web/JavaScript/Reference/Global_Objects/encodeURI "&"、 "+"、 "="などの理由で、encodeURIだけではXMLHTTPRequestsなどの適切なHTTP GETおよびPOSTリクエストを作成できないことに注意してください。はエンコードされていませんが、GETとPOSTリクエストで特殊文字として扱われますが、encodeURIComponentはこれらの文字をエンコードします。 – ceejayoz
サイドノート:これはjQueryを使用しない奇妙な理由です。 Axiosのような別の小さなライブラリを使うこともできます。独自のXMLHTTPRequestを作成するのは馬鹿です。 – ceejayoz
私もそれを試しました、encodeURIComponent、リンクをありがとう、私はそれをチェックアウトします。また、これらのケースのいずれかでPHP側でurldecodeを使用するのも問題です。私は最初のケース(urlencodeを使って)ではないと思います。 – subalublub