2010-11-28 2 views
2

Я использую шаблон POST/REDIRECT/GET в своем приложении. Однако у меня есть проблема:Проблема с шаблоном PRG?

В случае, если я хочу отобразить сообщение на этапе GET, я могу сохранить его как переменную сеанса на этапе POST (когда будет определено, какое сообщение должно отображаться), например $_SESSION['message']='mplampla';

Используя эту технику, сообщение должно быть отменено после отображения, чтобы не отображать его снова ошибочно на других страницах. Но если пользователь снова вернется, а затем снова перейдет на страницу GET, сообщение не будет отображаться во второй раз, так как оно было отменено в первый раз.

Я не знаю, как другие веб-сайты управляют этим ... Я видел веб-сайт с регистрационной формой, который отображает сообщение после успешной регистрации по тому же URL-адресу и работает правильно, когда вы делаете обратно/вперед.

+0

Возможно, я ошибаюсь, но если вы отменили сеанс, то он больше не будет отображаться, потому что его не существует ... – martynthewolf 2010-11-28 15:08:40

+0

unset после получения сообщения – GorillaApe 2010-11-28 15:18:44

ответ

4

Не храните сообщение в $_SESSION. Вместо этого передайте его как параметр на страницу GET.

Например, на этапе GET, перенаправлять пользователя

http://localhost/widget.php?edit=1&message=saved

Затем в widget.php сделать:

$message = isset($_GET['message']) ? $_GET['message'] : null; 
$output = null; 
switch($message) { 
    case 'completed': // possibly use a constant here, eg MESSAGE_COMPLETED 
     $output = 'Your changes has been saved.'; 
     break; 
    case 'failed': 
     $output = 'ERROR: failed to save changes!'; 
     break; 
} 

// Now present $output to the user anyway you like 

Если пользователь возвращается и вперед, сообщение все равно будет будет отображаться просто отлично. Он также избегает любых проблем, связанных с состоянием сеанса.

Смежные вопросы