有没有办法限制用户不要每天登录一次。这可能在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();
?>
对此有任何帮助将不胜感激。
谢谢!
答案 0 :(得分:2)
你是不正确的,你不应该通过IP地址限制。一些原因包括:
如果您有上次成功登录的时间戳,只需检查该用户是否有先前的登录信息,如果是,请在登录时多长时间才登录。
请注意,此方案中的任何内容都不会阻止用户保持登录,只要他们愿意,但他们必须与网站进行交互(亲自或使用机器人)经常出现以防止会话超时)。
答案 1 :(得分:1)
我只是将一个像“lastLoginTime”这样的列添加到login / users / whatever表中,并在用户登录时更新该时间。然后在登录时检查它以查看他们登录的时间,lastLoginTime,是在最后12/24 /任何时间内。
答案 2 :(得分:1)
您只需查询时间戳大于24小时的位置。
$sql = "SELECT COUNT(1) FROM `users` WHERE `timestamp` >= DATE_SUB(NOW(), INTERVAL 1 DAY)";
如果有结果,请不要让他们进去。
这假设您有一个带有时间戳字段的用户表,该字段在用户登录时会更新。我不知道您在帖子中对整个限制表做了什么。
但这是一个有缺陷的系统。如果出现问题,你应该存储一个cookie或者某些东西,并且在你完成所服务的任何事情之前,它们会被注销,发生一些事情等等。当然,在不知道你真正想要做什么的情况下,我知道什么?
答案 3 :(得分: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.");
}
}
答案 4 :(得分:0)
您可以创建另一个名为last_login的列,您将在其中存储登录时间。下次用户尝试登录时,请检查last_login时间和当前时间之间的差异,如果小于24小时,请限制用户。