読者です 読者をやめる 読者になる 読者になる

【php】パスワードを保存する機能の実装方法について考えてみた

php webサービス webサービス開発について考えてみる

はじめに

ログイン画面でよく目にする「パスワードを保存する」チェックボックス
これの実装を依頼されて、よく考えてみたらやったことないなと気づきました・・・
基本的なこと機能ではあるとは思うのですが・・・

・案1・・・クッキーにログインIDとパスワードを保存
・案2・・・クッキーに適当なキーを保存して、そのキーに紐付ける形でサーバー側にIDとパスワードを保存
ちょっと考えてみましたが一般的にこのような形になるのでしょうか

案1・・・クッキーにログインIDとパスワードを保存

これは単純で、ログインボタンが押されたタイミングで入力されたログインIDとパスワードをクッキーに保存
次回、ログイン画面を表示するときにクッキーから取り出してログインフォームにセットしてやるだけ

ただ、これだとクッキーの中身を見たらまんまログイン情報が見えてしまうのでちょっと心配かも・・・
また、ログイン画面とかなら普通SSLを使っているとは思うけど、クッキーをセットする際にもSSLの場合のみクッキーを送信するように設定しておかないと平文のままログイン情報が流れてしまうことになるのでこれは注意かも

phpの場合

setcookie(
    "password",
    "xxxxxxxxx",
    time()+24*60*60*30,
    "/",
    $domain,
    true // ★これをtrueに
);

案2・・・クッキーに適当なキーを保存

こちらはコード書いたほうがわかりやすいので書いてみる

ログインボタンが押されたとき

$key = "ユニークなキー"
$data = array("email" => "xxxxx@xxx.jp", "password" => "パスワードをcrypt関数などで暗号化した文字列");
$data = json_encode($data);

// $key => $dataの形でdbなりサーバー上のストレージに保存

// クッキーに$keyを保存
setcookie("key", $key);

ログイン画面が表示されるとき

if ($_COOKIE["key"]) {
    $data = json_decode($_COOKIE["Key"]);
    // $dataよりログインフォームの初期値をセット
}

まとめ

今思いつく形だと上記のような形だけど、クッキーにパスワードとかを直接いれるのはたぶんちゃんとしたシステムだとありえないのだろうなと思いました。
なので案2のような形で実装するのがいいのかな・・・

けどなんとなくこれでも不安なので他にいい実装方法ないでしょうか・・・

以上です