2017-05-30 9 views
0

私はいくつかの方法を試しました、私はそれが特殊な文字の問題であることを確認しました。私は手紙/数字だけを含んだ簡単なパスワードの組み合わせを試しました。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'; 

しかし、使用しては、これは大丈夫でした。

+0

https://developer.mozilla。org/en-US/docs/Web/JavaScript/Reference/Global_Objects/encodeURI "&"、 "+"、 "="などの理由で、encodeURIだけではXMLHTTPRequestsなどの適切なHTTP GETおよびPOSTリクエストを作成できないことに注意してください。はエンコードされていませんが、GETとPOSTリクエストで特殊文字として扱われますが、encodeURIComponentはこれらの文字をエンコードします。 – ceejayoz

+0

サイドノート:これはjQueryを使用しない奇妙な理由です。 Axiosのような別の小さなライブラリを使うこともできます。独自のXMLHTTPRequestを作成するのは馬鹿です。 – ceejayoz

+0

私もそれを試しました、encodeURIComponent、リンクをありがとう、私はそれをチェックアウトします。また、これらのケースのいずれかでPHP側でurldecodeを使用するのも問題です。私は最初のケース(urlencodeを使って)ではないと思います。 – subalublub

答えて

0

リクエスト全体をJSON形式で送信するか、URLでエンコードしてください。両方のミックスはかなり奇妙です:

var params = 'user=' + encodeURIComponent(loginInpUser.value) + '&pass=' + encodeURIComponent(loginInpPass.value); 
$user = $_POST['user']; 
$pass = $_POST['pass']; 

または:

var params = JSON.stringify({ user: loginInpUser.value, pass: loginInpPass.value }) 
$params = json_decode(file_get_contents('php://input'), true); 
echo $params['user'], $params['pass']; 

これが適切に任意の "特別な" 文字を正しく保持されます。

+0

ありがとう。私はそれが最終的に動作するようになった。私は2番目のバージョンを使用して終了しました。 – subalublub

+0

ハッシュを生成する何らかの理由で、PHP側で二重引用符で囲まれた文字列に$ passを設定すると失敗しますが、一重引用符とハッシュ/ストアを使用してパスワードが一致します...私はそれで何が起こっているのか分かりません。私はこの問題を潜在的なチェックの対象としている誰かのために私の質問に追加します。 – subalublub

関連する問題