переменная сессии php - PullRequest
1 голос
/ 06 мая 2010

моя переменная сеанса, кажется, продолжает отбрасывать значения своего массива. Что я могу делать не так? Это мой объект?

session_start () инициируется в начале,

if(isset($_SESSION['locations'])) { 
     unserialize($_SESSION['locations'])->listItems($_POST['companyLocation']); 
     echo "session exists"; 
}
else{
     $_SESSION['locations'] = serialize(new Location());
     unserialize($_SESSION['locations'])->listItems($_POST['companyLocation']);
     echo "session does not exist";
}        

class Location{

    function listItems($location){

    $array;

    $array[] = $location;

    //print_r($array);

    // Re-index:

    $array = array_values($array);

    print_r($array);

    $count = count($array);

    for ($i = 0; $i < $count; $i++) {

        echo "{$array[$i]}\n";

    }

    }

}

Ответы [ 2 ]

4 голосов
/ 06 мая 2010

У вас есть следующая строка в начале вашего php-скрипта?


<?php
session_start();
...

Глядя на ваш класс Location, функция listItems выглядит ужасно неработающей, что вы пытаетесь сделать?

Быстрый рефакторинг класса вашего местоположения на основе вашего комментария:


class Location {

    private $locations;

    public static function instance($args = null) {
        return empty($_SESSION['locations']) ? 
            new Location($args) : unserialize($_SESSION['locations']);
    }
    public function __construct($locations = null) {
        $this->locations = empty($locations) ? array() : $locations;
    }
    public function addLocation($location) {
        $this->locations[] = $location;
    } 
    public function listItems() {
        print_r($this->locations);
    }
    public function saveInstance() {
        $_SESSION['locations'] = serialize($this);
    }
}

Использование будет:


<?php
session_start();

$location = Location::instance();
if(!empty($_REQUEST['companyLocation']));
    $location->addLocation($_REQUEST['companyLocation']);
$location->listItems();
...
$location->saveInstance();
?>

2 голосов
/ 06 мая 2010

Первое, что приходит на ум:

  1. Не забыли ли вы использовать session_start() вверху каждой страницы перед отправкой заголовков? если нет, то между страницами не сохраняется информация о сеансе.
  2. $_SESSION['locations'] устанавливается для объекта. Вы никогда не сериализовали объект, что может вызвать проблемы при попытке сохранить его в сеансе. См. http://www.php.net/manual/en/language.oop5.serialization.php для получения дополнительной информации о сериализации объектов и сохранении их в объекте сеанса.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...