ログイン認証を行うのであればセッションとして使用するCookieには基本的にログインに使用した値を格納してはいけません。
・Cookieにemailとpasswordが平文で格納して欲しくない
・「ログイン情報を保持する」にチェックボックスが入っていた場合に保持させたい
以上の要件を満たすのであれば
login_form.php
if (isset($_POST['email']) && isset($_POST['password'])) {
$email = $_POST['email'];
$password = $_POST['password'];
//以降は認証を行う処理
}
まずlogin_form.phpでフォームからの入力を受け取り、認証に成功すればlogin_admin.phpに値を渡すようにします。
login_admin.php
$session = $password.$email;
$sessionid = hash('sha256',$session);
setcookie("sessionid", $_SESSION["sessionid"], time() + 3600);
認証に成功した場合にセッションとして使うCookieはサーバー側でハッシュ化した値をレスポンス時のSet-Cookieでユーザに渡すようにします。
DBにアカウント情報を保存している場合はハッシュ化された値を保存しておき、ユーザがPOSTしてきたemail+passwordをハッシュ化したものと比較して認証を行ってください。
また、ログイン時にアカウント情報の入力の手間を省く機能は、基本的にはブラウザ依存で実装します。
以下のようにするとフォーム要素にautocomplete属性を付与できるのでチェックボックスをクリックする度に保持するかどうかを決めることが可能です。
ログインを行う画面のhtml
<body>
<form action="login_form.php" method="post">
<input type="text" id="email" name="email">
<input type="password" id="password" name="password">
<input type="checkbox" id="check"><a>Remember me</a>
<input type="button" value="login">
</form>
<script>
var elem = document.getElementById('check');
var email = document.getElementById('email');
var passwd = document.getElementById('password');
elem.addEventListener('change',function(){
if(!email.getAttribute("autocomplete")){
email.setAttribute("autocomplete","on");
passwd.setAttribute("autocomplete","on");
}else{
email.removeAttribute("autocomplete");
passwd.removeAttribute("autocomplete");
}
});
</script>
</body>
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
退会済みユーザー
2018/02/21 14:10
2018/02/21 14:43