PHP $ _SESSION değişkenleri geçerli olmaz -

3 Cevap php

Benim uygulamanın sayfaların her biri çağırdı kod ilk satırı, bir:

<?php require_once('../../_includes/initialize.php'); ?>

Bu dosya SESSION dahil benim sınıfları, çağırır. Şeyden önce SESSION class aramalar session_start() tarayıcıya çıktı.

Tek sayfada tüm adıyla, onay kutularını bir ton olan bir form kullanıyorum photo_select. Ben 15 gruplar halinde fotoğrafları bölmek ve sonra sayfalandırmada üstünde girişlerini göndermek vardır.

Amacım bir kullanıcı yeni bir sayfaya geçer zaman $_POST vars yakalamak ve onları takip etmektir. Karmaşık tek seçilen herhangi bir onay kutularını ve (ben her fotoğraf kimliği kurdum) değerlerinin bir dizi tutar photo_select denilen onay kutusunu dizidir.

Pagination bir gönderme düğmeleri her zaman tıklandığında, ben teslim onay kutusunu dizi çekmek ve seçilen tüm fotoğrafları izlemek, böylece array_merge önce seçilen onay kutularını kaydedilmiş dizi ile birleştirmek için kullanmak gerekir tüm sayfaları.

Ben doğrusu veritabanı sorgulama kaydetmek için bir geçici veritabanına göndermek istemem. Bir $_SESSION değişkene seçimleri çalışan dizi tutmak için hafif bir performans artışı olur.

Bu test etmek için, aşağıdaki kodu var:

if( isset( $_POST['page'] ) ) {
    // Picking up the form data and assigning it to variables

    ... variables

    $photos = $_POST['photo-select'];

    $_SESSION['photo_holder'] = $photos;
}
echo isset($_SESSION['photo_holder']) ? 'true' : 'false';

SOLUTION:

change line: 

$_SESSION['photo_holder'] = $photos;

to:

if(isset($_POST['photo-select']) && !empty($_POST['photo-select'])) { $_SESSION['photo_holder'] = $photos; }

Ben 3 fotoğrafları seçin ve başka bir sayfaya tıklayın, örneğin, doğru olarak geri geliyor (ve $ _SESSION değişkeni mağazalar 3 fotoğraf kimlikleri bir dizi). Hangi mükemmel.

Artık yeni sayfada fotoğrafları tıklatın ve başka bir sayfaya taşımak yoksa Ama sonra, bu gibi sahte geri geliyor - yani $ _SESSION değişkeni silinmiştir.


Sooooooooo ***

Why oh why would the $_SESSION variable not persist?

3 Cevap

$photos = $_POST['photo-select'];    
$_SESSION['photo_holder'] = $photos;

$_POST['photo-select']; tanımsız ise $_SESSION['photo_holder'] kötü olur

EDIT: If someone wants to try it himself

session_start();
$_SESSION['test'] = 2;
if (isset($_SESSION['test']))
 echo 2;
$_SESSION['test'] = $_POST['a'];  //missing POST variable
if (isset($_SESSION['test']))
 echo 2;

Aslında dizi birleştirme konum gibi Eh, şu anda görünmüyor. Ben kaldırılan kodunda bu yaptığınızı zannedebilir, ama ayarlamak sonra $photos set ve görmek $_SESSION[photo_holder']. Yani, ben vurmak her zaman $_SESSION['photo_holder'] değerlerini ekleme (veya kontrolsüz olmuştur olanlar kaldırma) değil, gönderin. Bunun yerine, $ fotoğraflarda ne olursa olsun yazılır ediliyor.

Ben küçük başarı ile sadece küçük bir miktar $ _SESSION ile berbat ettik. Ben de tavsiye ederim

1) istemci tarafında oturumları takip etmek için çerezler kullanılması

VEYA

Kullanıcı bir "çıkış" rutin başlatılan veya tarayıcıyı kapatana kadar 2) Kullanımı HTML form mesaj aktif oturumları tutmak için

Ben ikinci yönteme kısmi değilim. Ben bunu bir çok kullanırım ve o inşaat büyük!!