PHP Post-Redirect - 在某些特定的Android设备中失败

时间:2017-08-15 09:05:27

标签: php android session redirect

我引用了一篇文章(底部提供的参考链接)来实现PHP中的Post-Redirect-Get(PRG)模式(底部提供的实现链接)。 在大多数设备中都能正常运行;但在某些特定设备中不起作用。我发现这是在一些用户报告他们无法注册新帐户后(我在那里使用过相同的PRG实现)。此问题仅限于某些特定的Android设备尚未在任何其他平台上报告

遇到此问题的用户在其设备中的所有浏览器中都会遇到此问题。

最初,我怀疑此问题与 PHP SESSION 有关,我在这些设备中彻底​​测试了会话。但是,它们正常工作(PRG实现链接中提供的会话测试实现链接)。

我没有任何设备存在此问题,因此我无法自行重现此问题。我在遇到这个问题的朋友的帮助下尝试调试,因此我仍然可以间接地重现它。

您可能无法重现此问题,在这种情况下,请查看代码并查看是否有任何错误。

在2000名用户中,只有30-50名用户遇到了这个问题。

报告此问题的部分用户的设备列表 -

  • Moto Z Play,Android 7.0
  • Moto M,Android 7.0
  • Xiaomi Mi 4i,Android 5.0.2
  • OnePlus 5,Android 7.0

注意 - 我还没有在上述模型的多个设备中测试此问题,也就是说,相同的PRG实现可能适用于所有OnePlus 5模型,除了报告问题的那个。

PRG模式实施参考 -
http://wordsideasandthings.blogspot.in/2013/04/post-redirect-get-pattern-in-php.html
用于演示该问题的实施(仅限于那些特定设备) -
http://witch-hunt-crewmemb.000webhostapp.com/stackoverflow/prg/echochamber.php

PRG实施 -

<?php
session_start();

$echoedShout = "";

if(count($_POST) > 0) {
    $_SESSION['shout'] = $_POST['shout'];

    header("HTTP/1.1 303 See Other");
    header("Location: http://witch-hunt-crewmemb.000webhostapp.com/stackoverflow/prg/echochamber.php");
    die();
}
else if (isset($_SESSION['shout'])){
    $echoedShout = $_SESSION['shout'];

    /*
        Put database-affecting code here.
    */

    session_unset();
    session_destroy();
}
?>

会话测试实施 -

<?php
session_start();
if(isset($_SESSION['y'])){
    $x=$_SESSION['y'];
    unset($_SESSION['y']);
}
else{
    $_SESSION['y']='b';
    $x='a';
}
echo $x;
?>

1 个答案:

答案 0 :(得分:0)

启用了chrome数据保护程序的设备出现了问题。禁用它可以立即解决问题。 它仅在android设备上发生,因为chrome android上会显示“启用chrome数据保护程序”提示,但在台式机上则需要从chrome网上商店中明确安装。