PHP最近查看的产品


PHP Recently Viewed Products

如何为最近查看的产品编写代码?我使用数据库创建动态页面,并认为我可以将ID号存储在会话或cookie中,然后从数据库中提取图像和标题。尽管我不知道这是否可行。我只希望它显示最近查看的5个项目,而不显示任何重复项。有什么想法吗?

如果用户已登录,您可以创建一个名为"userViews"的表,提供用户ID和查看的产品ID。然后,您可以在productID上使用"select DISTINCT"选择查询。这将选择唯一的值。(检查http://www.w3schools.com/sql/sql_distinct.asp)

如果用户没有登录,我建议你也这样做,但不要使用userID,而是尝试从用户那里找到一些独特的东西。您可以尝试使用随机(唯一)数字设置cookie或会话,并将其链接到数据库。

传统的方法是存储在cookie中。如果你可以加密cookie,就这样做。

记住,cookie可以由用户修改。第一条规则是永远不要信任用户输入。总而言之,在显示信息之前,请确保验证,否则您将面临攻击。

是否将ID存储在阵列中?用","或"."分隔--不要创建100个不同的cookie来存储ID。

您还可以使用SQL来存储视图。。。但是为什么要使用不需要的sql查询呢?SQL是用于长期存储的。会话和Cookie用于当前操作。

有三种方法可以显示最近查看的产品。(也许是其他方式,但这3个是最常用的)。

  1. 基于IP
  2. 最近在Cookie中查看的商店
  3. 会话ID

基于IP

这不是一个好主意,因为有可能两个人使用同一个路由器,而没有看到产品的人会看到另一个人的最新视图。(你可以使用基于IP的方式向其他人展示你所在地区的情况等)。

基于Cookie

通过使用cookie,您可以100%确保您的网站向访问您网站的人显示最新产品,但并非所有用户/访问者都启用了cookie。此外,如果您没有正确加密,cookie也可以轻松编辑,并存在安全风险。

会话ID

您可以为访问者生成一个随机的user_id,并将这些信息存储在数据库中,如下所示:

start_session();
if(!$_SESSION['user_id']){
$_SESSION['user_id'] = rand(1, 1000000);
mysql_query('INSERT INTO products_recent (user_id) VALUES ('.$_SESSION['userid'].')');
}  

此外,您还可以选择/更新用户产品视图并显示给该用户。

如果您愿意,您可以每24小时轻松地清理一次数据库,也可以将这些数据用于分析目的。

最终注册用户

如果注册用户查看您的产品,我强烈建议保存在数据库中,并在他/她每次访问您的商店时显示这些最近查看的产品。