Я пытаюсь реализовать интерфейс post-redirect-get с использованием PHP для приложения UWP. Ниже показан мой фактический интерфейс PHP. Если я получу доступ к этому PHP-скрипту через веб-браузер (Chrome), то хеш-переменная будет создана и сохранена в $ _SESSION. Я могу убедиться, что это работает через другой написанный мной скрипт, который распечатывает все сохраненные переменные сеанса.
Если я пытаюсь получить доступ к этому же сценарию через мое приложение UWP, то хеш-переменная не сохраняется в $ _SESSION. Думая, что я каким-то образом испортил свой код UWP, я перебросил сетевые передачи и вижу, что хэшированная переменная возвращается в редиректе 303, но эта же переменная не сохраняется в $ _SESSION. Этот скрипт, кажется, только не сохраняет переменную при доступе через мое приложение UWP. С чего бы это?
<?php
include_once '/var/www/errLogger.php';
include_once '/var/www/hasher.php';
include_once '/var/www/jsonConverter.php';
//Get JSON data
try
{
$jsonArray = jsonToArray($_SERVER);
} catch (Exception $ex)
{
echo logger((string)($ex->getLine()), $ex->getFile(), $ex->getMessage());
}
//Save JSON to session
session_start();
$hash_id = createRedirectHash();
$_SESSION[$hash_id] = $jsonArray;
//Generate URL for this post request
$hashURL = "http://$_SERVER[HTTP_HOST]/php/redirectTest.php?hash=$hash_id";
//Reply with 303 redirect - 303 is used so GET request can pull requested data
header("HTTP/1.1 303 See Other");
header("Location: {$hashURL}");
?>
Ниже приведен пример вывода из моего скрипта, который печатает сохраненные переменные сеанса ….
Array (
[92ed11ad76704bf1e4fafcc8b4393d36f7f42dcdf0c1b28acd8c66bbdc545cd9] => test
[f4bdc2c305922e66790fae080587f54a169140f506734061ed4c23c285efa751] => test
[48d4979004aba405020ee5148dab8823ce450b4cb741953df598061178504398] => )
ОБНОВИТЬПосле дальнейшего изучения я понял, что сеанс сохраняется только тогда, когда Chrome на определенном компьютере используется для доступа к сценарию php. Доступ к сценарию через Firefox или через Chrome на другом компьютере приводит к тому, что переменная сеанса не сохраняется. Я даже попытался добавить session_write_close (); к моему сценарию и еще не видел никакой разницы в поведении …
Проверьте файл php.ini.
; где MODE — восьмеричное представление режима. Обратите внимание, что это
; не перезаписывает umask процесса.
; http://php.net/session.save-path
session.save_path = «/ tmp»
Других решений пока нет …