現在、セッションを使用してユーザーをサイトにログインさせています。ここで、クッキーをミックスに追加して、ユーザーが数日後にサイトにアクセスできるようにし、再度ログインする必要がないようにしたいと考えています。
パスワードを Cookie に保存したり、何かを暗号化したりしたくないので、私の解決策は、ユーザー名を Cookie に保存し、一種のログイン ハッシュ (各ユーザーの各ログインに固有) を使用して別の Cookie を作成することです。次に、各ページの上部で、Cookie とログイン セッションを確認します。Cookie は存在するがセッションが存在しない場合は、ユーザー名を見つけてユーザーをログインさせます。
したがって、これは、ログインに成功した後に発生します ($row['username']
は入力したユーザー名です)。
$_SESSION['username']=$row[username];
$_SESSION['user_id']=$row['id'];
$loginhash = substr(str_shuffle("0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"), 0, 32);
$number_of_days = 14;
$date_of_expiry = time() + 60 * 60 * 24 * $number_of_days ;
setcookie( "userlogin", $row['username'], $date_of_expiry, "/" ) ;
setcookie( "loginhash", $loginhash, $date_of_expiry, "/" ) ;
$today=date("Y-m-d");
mysql_query("update members set last_login='$today',loginhash='$loginhash' where id='$row[id]' ") or die(mysql_error());
そして、各ページの上部で、次のようにします。
if($_COOKIE['userlogin'] && !isset($_SESSION[user_id])){
$username=mysql_real_escape_string($_COOKIE['userlogin']);
$loginhash=mysql_real_escape_string($_COOKIE['loginhash']);
$result=mysql_query("select * from members where (username='$username' || email='$username') && loginhash='$loginhash' ") or die (mysql_error());
$row=mysql_fetch_array($result);
$_SESSION['username']=$row[username];
$_SESSION['user_id']=$row['id'];
}
そしてもちろん、ユーザーが手動でログアウトするときに Cookie の設定を解除します。
私の質問は、これを行うのは安全なことですか (他の誰かがユーザーのコンピューターを使用する危険は別として) ですか? ログインごとにランダム ハッシュが生成されるため、誰かが誰かのユーザー名で Cookie を作成し、その人としてログインすることはできません。
ログイン スクリプトは HTTPS 上にあるため、その側に危険はありません。