【问题标题】:What is the best way to determine if my users can accept cookies/sessions确定我的用户是否可以接受 cookie/会话的最佳方法是什么
【发布时间】:2014-12-02 04:28:27
【问题描述】:

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

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

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

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

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

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

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

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

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

我只是不知道下一步该怎么做 - 这些用户或机器人真的是在没有启用 cookie 的情况下访问结果页面,这意味着他们会在下一页的测试中失败,还是可能是其他原因?

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

【问题讨论】:

  • 您需要设置一个cookie,然后检查您是否在用户的下一个请求中取回该cookie。简单地调用 setcookie() 是没有意义的——你可以发送你想要的所有标题,这完全取决于客户端是否真正尊重 set-cookie 标题。
  • 我会首先让辅助函数不碍事。如果您在前一页设置 $_SESSION["sessionnumber"],请直接检查该值。用户如何从上一页获取信息?如果是重定向,请确保在执行此操作之前调用 session_write_close()
  • 客户详细信息的结果是没有重定向的 POST 表单。我觉得我需要整合 POST/REDIRECT/GET 但我还没有。 $_SESSION["sessionnumber"] 确实是在结果开始时设置的,所以我的 requestSession 函数对大多数客户来说应该可以正常工作吧?
  • 我想知道是否有像机器人通过我的结果页面到客户页面的红色听证会 - 他们不会接受会话,因此会抛出错误?也许我需要在警告电子邮件中提供一些帮助,以帮助我识别无法访问我的客户页面的真正潜在客户,以对抗我不关心的自动机器人?

标签: php session session-variables session-cookies


【解决方案1】:

你也可以用 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。使用 FF Web 开发人员工具栏,如果我禁用 cookie,我会按预期在客户页面上收到警告消息。我只是希望能够更准确地记录触发此警告的哪些人是实际用户,合法地没有启用 cookie,可能安装了阻止 cookie 的插件,甚至可能是机器人。跨度>
  • 对不起,如果我误解了,我可以告诉你如何检查 cookie,但我不能告诉你机器人是否正在访问你的网站,作为服务器管理员,你的工作是调查服务器上的日志并找到模式
猜你喜欢
  • 2021-12-04
  • 1970-01-01
  • 1970-01-01
  • 2010-09-17
  • 1970-01-01
  • 1970-01-01
  • 2023-03-15
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多