ログイン機能をつくっていた際に、何故かpassword_verifyが上手くいかなかったが、
create tableする際に、passwordの桁数が少なかったのが原因。
passwordを255にして
create table mail.users( username varchar(41) unique, password varchar(255) )
再度password_hashしたら、上手く機能しました。
<?php session_start(); $mysqli = new mysqli('localhost', 'hoge', 'hogehoge', 'mail'); $status = "none"; if(isset($_SESSION["username"])) $status = "logged_in"; else if(!empty($_POST["username"]) && !empty($_POST["password"])){ $stmt = $mysqli->prepare("SELECT password FROM users WHERE username = ?"); $stmt->bind_param('s', $_POST["username"]); $stmt->execute(); $stmt->store_result(); if($stmt->num_rows == 1){ $stmt->bind_result($pass); while ($stmt->fetch()) { if(password_verify($_POST["password"], $pass)){ $status = "ok"; $_SESSION["username"] = $_POST["username"]; break; }else{ $status = "failed"; break; } } }else $status = "failed"; } ?> <h1>ログイン</h1> <?php if($status == "logged_in"): ?> <p>ログイン済み</p> <?php elseif($status == "ok"): ?> <p>ログイン成功</p> <?php elseif($status == "failed"): ?> <p>ログイン失敗</p> <?php else: ?> <form method="POST" action="login.php"> ユーザ名:<input type="text" name="username" /> パスワード:<input type="password" name="password" /> <input type="submit" value="ログイン" /> </form> <?php endif; ?>