Php 用户可以每天单击一次链接

Php 用户可以每天单击一次链接,php,Php,我有一个用户表users,我有一个页面(例如:5个链接) 如果用户访问该页面并单击链接。。链接应该隐藏,用户不能再点击它了。 每24小时只有一次 我尝试在我的用户表中添加一列来存储单击链接的ID。。。每次用户访问链接页面时,请检查。。。但这很复杂 我有jquery代码,可以在单击时隐藏链接,但我认为我应该有一个crone任务 我需要建议和最好的方法(php)您可以在php中通过使用会话来实现这一点,因此基本上,您可以在会话中存储一个链接id,该id为0或1,具体取决于用户是否单击了链接。然后在加

我有一个用户表
users
,我有一个页面(例如:5个链接) 如果用户访问该页面并单击链接。。链接应该隐藏,用户不能再点击它了。
每24小时只有一次

我尝试在我的
用户
表中添加一列来存储单击链接的ID。。。每次用户访问链接页面时,请检查。。。但这很复杂

我有jquery代码,可以在单击时隐藏链接,但我认为我应该有一个crone任务


我需要建议和最好的方法(php)

您可以在php中通过使用会话来实现这一点,因此基本上,您可以在会话中存储一个链接id,该id为0或1,具体取决于用户是否单击了链接。然后在加载页面时,检查该标志并使用javascript隐藏链接

如果用户必须登录才能访问页面(听起来像是您有用户id),那么您可以将会话信息及其用户帐户信息存储在数据库中。然后,当他们首次登录或访问页面时,您可以做的第一件事就是检查会话信息

根据您以前是否使用过会话,这里有一个很好的教程:

你可以这样做:

<?php
    // Start the session
    session_start();

   // Set session variables
   $_SESSION["link_id"] = $link_no;
   $_SESSION["timestamp"] = NOW();
 ?>

他们第一次访问会话时,您可以检查会话信息中的所有时间戳,如果超过24小时,则将标志重置为0

如果看不到更多的代码,就很难更完整地回答。我建议在上面设置一个JSFIDLE或包含更多的代码细节

希望有帮助

编辑

是的,您可以在数据库中存储会话。这是一个有用的教程:

为了检查时间戳是否已过期,我将执行以下操作

  • 用户登录
  • 从他们的帐户信息中提取上一次/当前会话信息
  • 循环查看会话数据并检查是否有任何链接时间戳超过24小时
  • 如果时间戳确实超过24小时,则将链接标志重置为0-这意味着他们可以单击链接
  • 加载带有显示/不显示链接的html页面
    您需要创建一个新表:users\u click\u links具有3个属性:user\u id、link\u id、last\u click

    当您的PHP要呈现任何页面时,请在此表中检查该用户id是否有该链接id的条目。如果有,请检查该行的last_click datetime属性。如果与“now”的差异小于24小时,则返回404(或需要显示的任何客户端错误代码)。如果可以,请更新行的最后一次单击。如果它不存在,就创建它


    对于需要在页面中呈现的每个链接都是一样的。检查它们中的每一个,如果它们对用户无效,甚至不呈现文本。所有验证都应该在服务器端完成,您不需要使用jQuery来解决您的这个问题。

    我想您有一个
    用户
    表。现在,您只需添加一个
    链接
    表,并连接用户点击和
    链接_点击
    表中的链接。当用户单击适当的链接时,更新带有时间戳的
    last\u clicked
    字段

    links
    ----------
    id    link
    1      Link1
    2      Link2
    3      Link3
    4      Link4
    
    link_clicks
    ----------
    id    user_id   link_id   last_clicked
    1      101        3         {Timestamp}
    

    现在,每次您都可以通过比较当前时间和存储的时间戳来检查用户是否单击了链接。

    cookies+检查ip+使用javascript检查hw id(例如:
    fingerprintJS
    ),感谢您的快速回答!是的,我使用会话之前。。。但是我可以将会话存储在数据库中吗?我知道如何存储值,但是检查24小时又如何呢?我更新了我的答案,展示了在数据库中存储会话的教程,以及检查链接的过程。我不会每24小时检查一次,对于每个用户来说,24小时的时间段是不同的——因此,在晚上11点59分单击链接的用户和在早上6点单击链接的用户将有不同的重置时间。如果您只希望它在午夜重置,那么您可以设置一个cron作业来触发一个存储过程,该过程将在午夜删除所有会话数据。请投赞成票。它帮助其他人得到答案。
    links
    ----------
    id    link
    1      Link1
    2      Link2
    3      Link3
    4      Link4
    
    link_clicks
    ----------
    id    user_id   link_id   last_clicked
    1      101        3         {Timestamp}