Как обновить переменную сеанса - PullRequest
6 голосов
/ 28 мая 2011

Я создаю многошаговую форму с помощью Ajax и хотел бы изменить отображаемый текст в зависимости от значения поля формы. Я думал, что хороший способ сделать это будет с переменной сеанса. Как сказать сеансу обновиться с новым значением поля? В настоящее время кажется, что сеанс хранит только начальное значение, но не обновляет его. Таким образом, если пользователь вводит «Джон» в качестве имени, а затем возвращается и меняет его на «Фрэнк», «Джон» - это сохраненное имя.

if (!isset($_SESSION)) {
session_start();
$_SESSION['formStarted'] = true;
$_SESSION['timestamp'] = date("M d Y H:i:s");
$_SESSION[$key] = $value;

<p>Your name begins with the letter <?php if ($_SESSION['name'] =='Frank') 
  {echo 'F';}?><p>

JQuery:

$("#form").validate({
   //...
   submitHandler: function(form) {

   //... 
   $(form).ajaxSubmit({               
     type: "POST",
     data: {
       name : $('#name').val(),
//...
     },
     dataType: 'json',
     url: '../ajaxtest.php',
     error: function() {alert("There was an error processing this page.");},
     success: 
       function(data) {
         $('#output1').html(data.message.join(' ')).show(500);
         $('#ouput1').append(data);
//...

ajaxtest.php:

session_start();

$expected = array( 
'name'=>'string', 
//...
);

//...

$return['message']=array();
if(!empty($_POST['name'])){
   $return['message'][] = '' . htmlentities($_POST['name'], ENT_QUOTES, 'UTF-8');
   } 
//...
echo json_encode($return);

Ответы [ 3 ]

0 голосов
/ 18 июля 2017

Вот как должен работать $ _SESSION. Поскольку одна и та же переменная может использоваться на разных страницах, и в процессе обработки, и поэтому изменение значений будет недопустимым.

В вашем случае вы пытаетесь обновить $ _SESSION ['name'] и вам необходимо сохранить все остальные значения сеанса без изменений. Возможное решение

<?php
session_start();
unset($_SESSION['name']);//remove $_SESSION['name']
session_regenerate_id();//Copies all other session variables on to new id
$_SESSION["name"] = $newValue;//Create new session variable 'name'.
session_write_close();
?>
0 голосов
/ 20 декабря 2017

Вы можете обновить $_SESSION так же, как вы обновляете простую переменную.$_SESSION - это глобальная переменная, и вы можете получить к ней доступ после объявления * 1003.

Не требуется unset session, когда вы хотите измениться, потому что вы работаете на том же memory address.

Например:

index.php

<?php 
   session_start();
   $_SESSION['key'] = 'firstValue';

anotherpage.php

<?php
   session_start();
   session_regenerate_id() // that's not required
   $_SESSION['key'] = 'newValue';

checkpage.php

<?php
   session_start();
   echo $_SESSIOn['key'];

Навигация

index.php -> anotherpage.php -> checkpage.php // output 'newValue'
0 голосов
/ 28 мая 2011

Если вы хотите создать постоянный сеанс между страницами, вам нужно вызывать session_start в начале каждого сценария, к которому должен применяться сеанс, а не только первый.

Документы PHP для session_start говорят, что функция сохранит сеанс, если он уже существует.

...