php oturum değişkeni

2 Cevap php

benim oturum değişkeni dizi değerlerini bırakarak tutmak gibi görünüyor. Neyi yanlış yapıyor olabilir? Benim nesne mi?

session_start () başlangıcında başlatılır,

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 Cevap

Eğer php script başında aşağıdaki satırı var mı?


<?php
session_start();
...

Lütfen Yer sınıfında baktığımızda, ListItems fonksiyonu nedir yapmak için çalışıyoruz olduğunu, korkunç kırık görünüyor?

A quick refactor of your Location class based on your comment:


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);
    }
}

Usage would be:


<?php
session_start();

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

Akla gelen ilk şey:

  1. Eğer üstbilgileri gönderilmeden önce, her sayfanın üst kısmında session_start() kullanmak hatırlamak mı? değilse, o zaman hiçbir oturum bilgileri sayfalar arasında saklanır.
  2. $_SESSION['locations'] bir nesneye ayarlanır ediliyor. Bir oturumda içine saklamak için çalışıyor sorunlara neden olabilir nesneyi, tefrika asla. http://www.php.net/manual/en/language.oop5.serialization.php nesne serileştirme hakkında daha fazla bilgi için, bkz ve oturum nesnesi saklayarak.