3

ユーザーが 1 日に 1 回以上ログインしないように制限する方法はありますか。これはPHPで可能ですか?もしそうなら、それを行う方法を教えてもらえますか?

私のデータベースには、ユーザー名とパスワードのフィールドとタイムスタンプがありますか? さらに何を追加すればよいですか?

私はこれを試しましたが、問題は、 IPで制限したくないことであり、ユーザーを尊重する必要があります。

<?php
mysql_connect("localhost", "root", "");
mysql_select_db("");

mysql_query("delete from restrict where time >= " . time() + (24*3600));

$result = mysql_query("select * from restrict where ip =\"{$_SERVER['REMOTE_ADDR'}\"");

if(mysql_num_rows($result) == 0) {
$sql = "insert into restrict values('', '{$_SERVER['REMOTE_ADDR']}', '" . time() . "')";
mysql_query($sql);
} else {
die("You cannot access this page for 24hrs after you viewed it last...");
}

mysql_close();
?> 

これに関するヘルプをいただければ幸いです。

ありがとう!

4

5 に答える 5

2

IPアドレスで制限すべきではないというあなたは正しいです。いくつかの理由は次のとおりです。

  • 一部のユーザーは、スマートフォンを持って通りを歩いたり、ルーターを再起動したりするだけで、新しい IP アドレスを取得できます。
  • 一部の IP アドレスは、多数のユーザーによって共有されています。一部の AOL IP アドレスは、何万もの AOL ユーザーによって共有されています (プロキシ ゲートウェイ)。

最後に成功したログインのタイムスタンプがある場合は、そのユーザーの以前のログインがあったかどうかを確認し、ある場合は、そのログインがログインを試みたときからどれくらい前かを確認してください。

このスキームでは、ユーザーが望む限りログインしたままにすることを妨げるものは何もないことに注意してください。ただし、セッションのタイミングを妨げるために、Web サイトと (直接またはボットを使用して) 頻繁に操作する必要があります。アウト)。

于 2012-08-30T04:58:14.930 に答える
2

タイムスタンプが 24 時間以上前の場所をクエリするだけです。

$sql = "SELECT COUNT(1) FROM `users` WHERE `timestamp` >= DATE_SUB(NOW(), INTERVAL 1 DAY)";

結果がある場合は、入れないでください。

これは、ユーザーがログインしたときに更新されるタイムスタンプ フィールドを持つユーザー テーブルがあることを前提としています。この制限テーブル全体を投稿で何をしているのかわかりません。

ただし、これは欠陥のあるシステムです。何か問題が発生してログアウトされたり、何かが発生したりした場合に備えて、提供しているものをすべて処理する前に、Cookie などを保存する必要があります。もちろん、あなたが本当にここで何をしようとしているのかを知らずに、私は何を知っていますか?

于 2012-08-30T04:59:13.257 に答える
1

「lastLoginTime」のような列をlogin/users/whateverテーブルに追加し、ユーザーがログインするたびにその時間を更新します。次に、ログイン時にチェックして、ログインした時間、lastLoginTimeが最後の時間内であるかどうかを確認します12/24/何時間でも。

于 2012-08-30T04:58:03.953 に答える
1

はい、あなたが言ったように別のテーブルを作ることができます

id_user | date

両方の整数

$db = new PDO('mysql:host=localhost;dbname=testdb', 'username', 'password');
$stmt = $db->prepare("SELECT * FROM `restrict` WHERE `id_user`=:id_user");
$stmt->execute(array(':id_user' => $_POST['username']));
$exist = $stmt->rowCount();
if(!$exist){
    $stmt = $db->prepare("INSERT INTO `restrict` VALUES(:id_user,:date)");
    $stmt->execute(array(':id_user' => $_POST['username']), ':date' => date('Ymd'));
} else {
    $row = $stmt->fetch(PDO::FETCH_ASSOC);
    if($row['date'] != date('Ymd')){
        $stmt = $db->prepare("UPDATE `restrict` SET `date`=:date WHERE `id_user`=:id_user)");
        $stmt->execute(array(':id_user' => $_POST['username']), ':date' => date('Ymd'));
    } else {
        die("You already accessed this page today.");
    }
}
于 2012-08-30T05:05:25.783 に答える
0

ログイン時間を格納する last_login という別の列を作成できます。ユーザーが次回ログインしようとしたときに、last_login 時刻と現在時刻の差を確認し、24 時間未満の場合はユーザーを制限します。

于 2012-08-30T04:58:23.343 に答える