Сеансы PHP Var не сохраняются ... Возможные проблемы с php.ini? - PullRequest
0 голосов
/ 15 декабря 2010

Я пытаюсь сохранить информацию в форме, используя сеансы на случай, если проверка вернет false, тогда пользователю не нужно будет заполнять форму.Вот как я это делаю:

СТРАНИЦА A:

<?
session_start();

$Fname = $_SESSION['FirstName'];
?>
<html>
<input type="text" id="First" value="<? if($Fname){echo $Fname;}?>">
</html>

СТРАНИЦА B:

<?
$Fname = $_POST['First'];

session_start();

$_SESSION['FirstName'] = $Fname;

//validation is not good then
header('Location: PageA.php');
?>

Проблема в том, что при отправке обратно на страницу A ничегоотображается во входах, но случайно это будет отображаться или, я обновлю, и это может появиться.По большей части это просто не работает, и то, что я не понимаю, вроде как начало происходить, когда я сделал модификацию удаления одного из переменных сеанса и заменил его cookie-файлом по другим причинам, но решил не идти по этому пути.,Тем не менее я не вижу, что я мог бы сделать, чтобы начать вызывать эту проблему.Есть идеи?Я думаю, что-то с файлом php.ini, потому что у меня есть отдельная форма с той же настройкой, и я никогда не трогал ее, и теперь она не работает, когда это был последний раз, когда я проверял.

ОБНОВЛЕНИЕ

Я только что попробовал форму, я отправил ее неправильно, чтобы вызвать проверку, и она отправила меня обратно с пустыми данными, как я уже упоминал.Я нажал на другую страницу, а затем вернулся к форме и появились входные данные.Кажется, как будто его хранение, но просто не читается сразу?Не знаю, поможет ли это.

Ответы [ 5 ]

2 голосов
/ 15 декабря 2010

На странице B session_start() должна быть первой командой на странице. Я всегда держу это наверху, просто чтобы быть уверенным

0 голосов
/ 15 декабря 2010

Я заработал, заполнив то, что вы пропустили в своем примере;это работает для вас?

PageA.php

примечание добавление <form action="PageB.php" method="POST"> и изменение id="First" на name="First"

<?
session_start();

$Fname = $_SESSION['FirstName'];
?>
<html>
<form action="PageB.php" method="POST">
<input type="text" name="First" value="<? if($Fname){echo $Fname;}?>">
</form>
</html>

PageB.php

(без изменений)

<?
$Fname = $_POST['First'];

session_start();

$_SESSION['FirstName'] = $Fname;

//validation is not good then
header('Location: PageA.php');
?>
0 голосов
/ 15 декабря 2010

Вам не нужно SESSION вообще ...

СТРАНИЦА A:

<?
  $Fname = isset($_POST['First']) ? $_POST['FirstName'] : '';
?>
<html>
  <form method='post' action='PageB.php'>
    <input type="text" id="First" value="<? if($Fname){echo $Fname;}?>"/>
  </form>
</html>

СТРАНИЦА B:

<?
//validation is not good then
include 'PageA.php';
exit;
?>
0 голосов
/ 15 декабря 2010

Трудно (по крайней мере, мне) помочь вам без дальнейших подробностей, но вот мои мысли:

  1. Из руководства по PHP: «Идентификатор сеанса не передается с заголовком Location, даже если session.use_trans_sid включен. Он должен передаваться вручную с использованием константы SID.»
  2. Одно решение найдено на других форумах: вызовите session_write_close () перед перенаправлением заголовка: внешняя ссылка

Очевидно, что header () может иногда выполнять перенаправление ДО того, как будет записан куки-файл сессии. Это может объяснить, почему иногда это работает, а иногда нет. Но, как я уже сказал, не уверен, что это относится к вашему коду.

0 голосов
/ 15 декабря 2010

Не уверен, что это опечатка, но в вашем входном теге у вас не указан атрибут "name", который будет означать пустой массив $ _POST при переходе на страницу B.

...