Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/251.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_Session Variables_Session Cookies - Fatal编程技术网

Php 确定我的用户是否可以接受Cookie/会话的最佳方法是什么

Php 确定我的用户是否可以接受Cookie/会话的最佳方法是什么,php,session,session-variables,session-cookies,Php,Session,Session Variables,Session Cookies,我需要一些帮助,为我的网站上的购买过程的一些逻辑 我们有一个4步购买流程:结果、客户详细信息、付款详细信息、订单确认 结果页面仅根据一些查询字符串参数将价格输出到屏幕 然后,我将大量信息保存到PHP会话变量中,供以后使用 在第二个阶段,客户阶段,我想将这些会话变量中的一些输出到屏幕上,这在很大程度上是可行的 在我的代码中,我首先要做的一件事是检查我在结果页面上设置的会话变量之一是否存在,以检查我们是否在营业,以及客户报价信息是否正确保存 我已经给自己设置了警告电子邮件,当用户登录预订过程的客户或

我需要一些帮助,为我的网站上的购买过程的一些逻辑

我们有一个4步购买流程:结果、客户详细信息、付款详细信息、订单确认

结果页面仅根据一些查询字符串参数将价格输出到屏幕

然后,我将大量信息保存到PHP会话变量中,供以后使用

在第二个阶段,客户阶段,我想将这些会话变量中的一些输出到屏幕上,这在很大程度上是可行的

在我的代码中,我首先要做的一件事是检查我在结果页面上设置的会话变量之一是否存在,以检查我们是否在营业,以及客户报价信息是否正确保存

我已经给自己设置了警告电子邮件,当用户登录预订过程的客户或付款阶段时通知我,但显然第一个会话变量不存在。然后,我会显示一条友好的错误消息,询问他们是否在浏览器中启用了cookie

我们似乎收到了很多这样的警告电子邮件,高得惊人。这并不像是一个准确的统计数据,显示在没有启用cookies的情况下,有多少客户可以到达

电子邮件提醒我当前URL、ref URL(如果有)、用户IP地址以及他们保存的所有会话变量的输出(当然总是没有!)

我只是不知道下一步该怎么办——这些用户或机器人是否真的在没有启用cookies的情况下访问结果页,这意味着他们将在下一页的测试中失败,或者可能是其他原因

我在每个购买页面的顶部都有session_start(),所以不是这样的

这是我的客户页面:

<?php

require_once "../includes/common.php";

$quoteShared        = new quoteShared();

// Check if this is a direct page hit
if (requestSession("sessionnumber") == "") {

    echo $quoteShared->directHit();
    die;

您也可以使用javascript进行此操作,方法如下:

function cookiesAreEnabled()
{   
    var cookieEnabled = (navigator.cookieEnabled) ? 1 : 0;  

    if (typeof navigator.cookieEnabled == "undefined" && cookieEnabled == 0){   
    document.cookie="testcookie";   
    cookieEnabled = (document.cookie.indexOf("test­cookie") != -1) ? 1 : 0; 
    }   

  return cookieEnabled == 1;
}
最佳方式PHP

<?php
    session_start();
    if(!isset($_GET['testing'])){
        setcookie('cookietest', 'somevalue', time()+3600);
        header("location: cookie.php?testing=1");
    }else{
        if(isset($_COOKIE['cookietest']) && $_COOKIE['cookietest'] == 'somevalue'){
            echo 'cookie enabled';
        }else{
            echo 'cookie not enabled';
        }

    }

您需要设置一个cookie,然后检查是否在用户的下一个请求中恢复了该cookie。简单地调用setcookie()是没有意义的-您可以发送所有想要的头,完全取决于客户机是否真正遵守setcookie头。首先,我要让helper函数不碍事。如果要在上一页上设置$_SESSION[“sessionnumber”],请直接检查该值。用户如何从上一页获取信息?如果是重定向,请确保在执行此操作之前调用的是
session\u write\u close()
。客户详细信息的结果是不带重定向的表单POST。我觉得我需要整合POST/REDIRECT/GET,但我还没有$_会话[“sessionnumber”]确实是在结果开始时设置的,所以我的requestSession功能对大多数客户来说应该可以正常工作,对吧?我想知道是否有一种红色的听觉,比如机器人通过我的结果页面进入客户页面-他们不会接受会话,是吗,因此会抛出错误?也许我需要在我的警告邮件中得到一些帮助,以帮助我识别无法访问我的客户页面的真正潜在客户,而不是我不关心的自动机器人?谢谢你的回答,但我不仅仅是在寻找一个编码解决方案,以确定他们是否启用了cookie。使用FF Web developer工具栏,如果禁用Cookie,则会按预期在客户页面上显示警告消息。我只想能够更准确地记录触发此警告的人中的哪些是实际用户,合法地没有启用Cookie,可能安装了阻止Cookie的插件,甚至可能是机器人。如果我误解了,请原谅,我可以告诉你如何检查cookie,但我不能告诉你是否有机器人正在访问你的网站,作为服务器管理员,你的工作是调查你服务器上的日志并找到模式
<?php
    session_start();
    if(!isset($_GET['testing'])){
        setcookie('cookietest', 'somevalue', time()+3600);
        header("location: cookie.php?testing=1");
    }else{
        if(isset($_COOKIE['cookietest']) && $_COOKIE['cookietest'] == 'somevalue'){
            echo 'cookie enabled';
        }else{
            echo 'cookie not enabled';
        }

    }