2016-09-30 2 views
-2

申し訳ありませんが、random_bytesを使用してランダムな値を生成しようとしています。ユーザーに一意のIDを伝え、データベースに挿入してください。ランダムな値を生成し、PHPのデータベースに挿入

私はissetを使用していますので、$ id = bin2hex(random_bytes(16))を実行しようとしましたが、ユーザーが[登録]ボタンをクリックすると別のIDが生成されます。データベース。

基本的に、彼のために生成されたランダムな識別子で、ログインするために保存する必要があります(ユーザー名として機能します)。

ありがとうございます!

私は、ユーザがフォームを投稿した後に値が生成されるが、まだ生成されていないものを彼に伝えたいので、これはissetと関係があることを知っています。どのようにそれを行うか分からない。

<?php 

if (isset($_POST['regbutton'])) { 

$username = bin2hex(random_bytes(16)); 
$password = ($_POST['password']); 
$repeatpw = ($_POST['repeatpw']); 

// blah blah validations 
// executes a database query and insets the $username variable into the db 

HTML - <input type="text" class="form-control" name="username" value="<?php echo $username; ?>"> 
+0

は、なぜそれがランダムでなければならないのですか?シーケンシャルに何か問題がありますか? –

+0

あなたのコードを教えてください。あなたが何をしているのかわからないなら、私たちは助けられません。 – Chris

+0

私は実際にそこに他の人がいくつあるかを知っているというアイデアは嫌いです。 – Nick

答えて

1
<?php 
session_start(); 

// generate a random "username" if you haven't done so yet 
if (!isset($_SESSION['username'])) { 
    $_SESSION['username'] = bin2hex(random_bytes(16)); 
} 
$username = $_SESSION['username']; 

// check for form post 
if (isset($_POST['regbutton'])) { 

    // get values from form post 
    $username = $_POST['username']; 
    $password = $_POST['password']; 
    $repeatpw = $_POST['repeatpw']; 

    // blah blah validations 
    if ($username != $_SESSION['username']) { 
    // user changed the username you showed him 
    } 
    // blah blah other validations 
    // executes a database query and insets the $username variable into the db 
} 
+0

ありがとうMark、これは実際に動作します!ユーザーがそれをクライアント側に変更した場合でも元の生成値を挿入する方法はありますか? (フォームを殺して、彼にそれを変更したと言っているのではなく)。 – Nick

+0

フォームからユーザー名を読み込まないでください。 $ username = $ _POST ['username']とそれをチェックするif(...)を削除してください。 $ usernameは$ _SESSION ['username']から引き出された値のままです。 –

+0

ええ、私はそれを行うセキュリティの問題を認識しています。大変ありがとう、私の一日を救った。 – Nick

0

あなたはJWTを使用する場合は、トークンを生成することができ、チェックアウトthe JWT library

関連する問題