Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/280.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用PHP Cookie识别未注册的在线购物者?_Php_Session_Cookies - Fatal编程技术网

如何使用PHP Cookie识别未注册的在线购物者?

如何使用PHP Cookie识别未注册的在线购物者?,php,session,cookies,Php,Session,Cookies,我习惯于在用户登录时使用php会话。我试图通过创建一个随机的用户id并将其存储在购物车中,来找出如何识别访客(未注册用户)的购物车,但我不理解cookies的逻辑。我正在生成一个cookie\u值,一个带有rand()的随机数。我是否需要像使用session.php一样将cookie.php添加到每个页面 cookie.php <?php $cookie_value =rand(10,100); $cookie_name='new_user'.$cookie_value; setcooki

我习惯于在用户登录时使用php会话。我试图通过创建一个随机的
用户id
并将其存储在购物车中,来找出如何识别访客(未注册用户)的购物车,但我不理解cookies的逻辑。我正在生成一个cookie\u值,一个带有
rand()
的随机数。我是否需要像使用
session.php
一样将
cookie.php
添加到每个页面

cookie.php

<?php
$cookie_value =rand(10,100);
$cookie_name='new_user'.$cookie_value;
setcookie($cookie_name,$cookie_value, time() + (86400 * 30), "/"); // 86400 = 1 day
$user_id=$cookie_value;
    if(!isset($_SESSION['login_user'])){
    include 'includes/cookie.php';
    }elseif(isset($_SESSION['login_user'])){
    include 'includes/session.php';
    }

    if(!empty($_POST)){ 
    if(isset($_POST['addCart'])){
    //insert product
    $product_id = $_POST['product_id'];  
    $user_id = $_POST['user_id']; 
    $quantity=$_POST['quantity']; 
    $product_price=$_POST['product_price']; 

     // prepare and bind
    $cart = $db->prepare("INSERT INTO shopping_cart 
   (user_id,product_id,quantity,amount) VALUES (?,?,?,?)");
    $cart->bind_param("iiis", $user_id,$product_id,$quantity,$product_price);
    $cart->execute();   

    if($cart){
      header('Location: cart.php');
      exit;
    }
    $cart->close();
    $db->close();

   } }

如果您需要在每个页面上包含cookies.php,请回答您的问题。您的cookie设置将导致麻烦,或者至少如果您使用多个cookie(甚至可能是您不知道的cookie)。如果您的cookie名称是随机的,您将如何轻松地检索它

您不应该连接随机值以形成cookie名称。因此,应将行更改为:

$cookie_value =rand(10,100); // sure about only 90 users??
$cookie_name='tmp_user_id'; // maybe temporary user is a more appropriate naming
if(!isset($_COOKIE['tmp_user_id']) && !isset($_SESSION['login_user'])) {
    setcookie($cookie_name,$cookie_value, time() + (86400 * 30), "/");
}
这样,您就可以在脚本中检索它,如下所示:

if(isset($_COOKIE['tmp_user_id'])) {
    $user_id = $_COOKIE['tmp_user_id'];
}
编辑


正如塞巴斯蒂安在评论中指出的那样,显然,您应该检查cookie是否已设置。因此,如果未设置cookie和用户会话,请设置cookie。如果您的会话设置过程应该驻留在session.php中,请在其后包含cookie.php。

要回答您的问题,如果您需要在每个页面上包含cookies.php,请选择“是”。您的cookie设置将导致麻烦,或者至少如果您使用多个cookie(甚至可能是您不知道的cookie)。如果您的cookie名称是随机的,您将如何轻松地检索它

您不应该连接随机值以形成cookie名称。因此,应将行更改为:

$cookie_value =rand(10,100); // sure about only 90 users??
$cookie_name='tmp_user_id'; // maybe temporary user is a more appropriate naming
if(!isset($_COOKIE['tmp_user_id']) && !isset($_SESSION['login_user'])) {
    setcookie($cookie_name,$cookie_value, time() + (86400 * 30), "/");
}
这样,您就可以在脚本中检索它,如下所示:

if(isset($_COOKIE['tmp_user_id'])) {
    $user_id = $_COOKIE['tmp_user_id'];
}
编辑


正如塞巴斯蒂安在评论中指出的那样,显然,您应该检查cookie是否已设置。因此,如果未设置cookie和用户会话,请设置cookie。如果您的会话设置过程应该驻留在session.php中,请在其后包含cookie.php。

您将事情复杂化了很多。PHP会话已经完成了您想要的任务。事实上,它们是专门用来解决这个问题的

默认情况下,PHP会话使用Cookie来维护请求之间的状态,并为每个用户分配一个唯一的会话ID,您可以从脚本中读取该ID。因此,您无需设置额外的cookie。您的代码可以简单到:

if(isset($_SESSION['logged_user'])) $user_id = $_SESSION['logged_user'];    
else $user_id = session_id();// id sticks because it was stored in a cookie by PHP
现在,您可以使用此
$user\u id
存储或检索数据库中的购物车数据。事实上,如果您正在与一个尚未登录的用户打交道,您甚至可以将购物车数据存储在
$\u SESSION
中,这样您就不会用非成员数据阻塞数据库


查看文档:

你把事情复杂化了很多。PHP会话已经完成了您想要的任务。事实上,它们是专门用来解决这个问题的

默认情况下,PHP会话使用Cookie来维护请求之间的状态,并为每个用户分配一个唯一的会话ID,您可以从脚本中读取该ID。因此,您无需设置额外的cookie。您的代码可以简单到:

if(isset($_SESSION['logged_user'])) $user_id = $_SESSION['logged_user'];    
else $user_id = session_id();// id sticks because it was stored in a cookie by PHP
现在,您可以使用此
$user\u id
存储或检索数据库中的购物车数据。事实上,如果您正在与一个尚未登录的用户打交道,您甚至可以将购物车数据存储在
$\u SESSION
中,这样您就不会用非成员数据阻塞数据库


请参阅文档:

在您的用户id列中,您是否同时存储登录的用户id和从cookie中随机生成的id以识别和检索购物车?@Yolo:不,我没有。我只想显示一个访客购物车。在您的“用户id”列中,您是否同时存储登录的用户id和从Cookie中随机生成的id以识别和检索购物车?@Yolo:不,我没有。我只想显示一个访客购物车。通过在每个页面上包含cookie.php,它不是每次都会创建一个新的随机数吗?在cart.php上,我使用此查询获取访客购物车:选择*FROM shopping\u cart,其中user\u id=“$user\u id”,但问题是cookie是随机的。。。号码变了,我无法取回购物车。但是如果我想识别哪个购物车属于哪个访客,我不能为每个访客设置相同的cookie。“这有意义吗?”塞巴斯蒂安法姆感谢你指出这一点。我修改了我的答案。通过在每个页面上包含cookie.php,它不是每次都会创建一个新的随机数吗?在cart.php上,我使用此查询获取访客购物车:选择*FROM shopping_cart,其中user_id=“$user_id”,但问题是cookie是随机的。。。号码变了,我无法取回购物车。但是如果我想识别哪个购物车属于哪个访客,我不能为每个访客设置相同的cookie。“这有意义吗?”塞巴斯蒂安法姆感谢你指出这一点。我修改了我的答案。