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

时间:2014-10-07 16:53:53

标签: php session session-variables session-cookies

我的网站上的购买流程需要一些逻辑帮助。

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

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

然后我将大量信息保存到PHP Sessions变量中供以后使用。

在第二阶段,即客户阶段,我想将一些会话变量输出到大部分工作的屏幕上。

在我的代码中,我做的第一件事就是检查我在结果页面上设置的一个会话变量是否存在,只是为了检查我们是否在业务中,客户报价信息是否正确保存。

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

我们似乎收到了很多这些警告电子邮件,令人担忧地高。如果没有启用Cookie,有多少客户无法准确统计数据,这并不是一个准确的统计数据。

电子邮件提醒我当前的URL,ref URL(如果有的话),用户的IP地址,以及他们保存的所有Session Vars的输出(当然不是!)

我只是难以接受下一步做什么 - 这些用户或机器人是否真的没有启用Cookie就会点击结果页面,这意味着他们会在下一页上通过测试,或者可能是其他什么?< / p>

我在每个购买页面的顶部都有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;

common.php顶部有session_start()。

function requestSession($xParam) {
    $value = "";

    if (isset($_SESSION[$xParam]))
    {
        if ($_SESSION[$xParam] != "") {
            $value = $_SESSION[$xParam];
        }
    }

    return $value;
}

1 个答案:

答案 0 :(得分:0)

你也可以用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';
        }

    }