2012-08-30 36 views
2

有沒有辦法限制用戶每天不要登錄一次?這在PHP中可能嗎?如果是的話,你可以指導我如何做到這一點?如何限制用戶每天登錄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(); 
?> 

任何幫助,將不勝感激。

謝謝!

+3

請不要使用'mysql_ *'功能的新代碼。他們不再被維護,社區已經開始[棄用流程](http://goo.gl/KJveJ)。查看[**紅框**](http://php.net/manual/en/function.mysql-pconnect.php)?相反,您應該瞭解[準備好的語句](http://goo.gl/vn8zQ)並使用[PDO](http://php.net/pdo)或[MySQLi](http://php.net/ mysqli的)。如果你不能決定,[本文](http://goo.gl/3gqF9)將有助於選擇。如果你關心學習,[這是一本很好的PDO教程](http://goo.gl/vFWnC)。 –

+0

你想讓他們保持登錄狀態一段時間,或只是查看某個頁面? – nick

回答

1

您只需查詢時間戳大於24小時前的位置。

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

如果有結果,不要讓他們進來。

這裏假設你有一個用戶表有一個時間戳字段,當用戶登錄。我不知道那是什麼更新你正在使用你的文章中的整個限制表。

雖然這是一個有缺陷的系統。你應該存儲一個cookie或者某些東西,以防出現問題,並且在他們完成任何你正在服務的任務之前,他們會註銷,發生某些事情等。當然,我不知道你真的在這裏做什麼,我知道什麼?

1

我只是在登錄/ users /任何表中添加一個類似「lastLoginTime」的列,並在用戶登錄時更新該時間。然後在登錄時查看它是否登錄時間lastLoginTime,是在最後的12/24 /任何時間內。

2

你是正確的,你不應該通過IP地址進行限制。一些原因包括:

  • 有些用戶可以通過使用智能手機在街上走路或重新啓動路由器來獲得新的IP地址。
  • 一些IP地址由很大的用戶共享。一些AOL IP地址由數以萬計的AOL用戶(代理網關)共享。

如果你有上次成功登錄的時間戳,只需檢查是否有該用戶的前一次登錄,如果是這樣,這種登錄是當他們試圖多久前登錄。

保持請記住,該方案中的任何內容都不會阻止保持登錄所需的時間,儘管它們必須每隔一段時間都要與網站進行交互(無論是親自進行還是使用bot),以防止會話從超時)。

0

您可以創建另一個名爲last_login的列,您可以在其中存儲登錄時間。下次用戶嘗試登錄時,請檢查last_login時間與當前時間之間的差異,如果時間少於24小時,請限制用戶。

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."); 
    } 
}