【发布时间】:2023-03-03 09:53:01
【问题描述】:
我参考了一篇文章(底部提供参考链接)在 PHP 中实现 Post-Redirect-Get(PRG) 模式(底部提供实现链接)。它在大多数设备上都能完美运行;但是它在某些特定设备中不起作用。在一些用户报告他们无法注册新帐户后,我发现了这一点(我在那里使用了相同的 PRG 实现)。该问题仅限于某些特定的 Android 设备,并且尚未在任何其他平台上报告。
遇到此问题的用户在其设备的所有浏览器中都会遇到此问题。
最初,我怀疑这个问题与 PHP SESSION 有关,我在这些设备上彻底测试了会话。但是,它们工作得非常好(PRG 实施链接中提供了会话测试实施链接)。
我没有任何设备存在此问题,因此我无法自己重现此问题。我在遇到此问题的朋友的帮助下尝试调试,因此我仍然能够间接重现它。
您也可能无法重现此问题,在这种情况下,请查看代码,看看是否有任何问题。
在 2000 名用户中,只有 30-50 名用户面临此问题。
报告问题的部分用户的设备列表-
- Moto Z Play,Android 7.0
- Moto M,Android 7.0
- 小米4i,安卓5.0.2
- 一加 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;
?>
【问题讨论】:
-
可能是 303 状态码的问题。我会尝试 302,看看是否会改变任何东西。 (en.wikipedia.org/wiki/Post/Redirect/Get)
-
@CBroe 我尝试发送 302,没有变化。尝试在标头位置之前显式发送 302 以及隐式使用标头位置,如果没有发送其他代码,默认情况下发送 302
标签: php android session redirect