Wątek przeniesiony 2014-05-21 21:06 z PHP przez dzek69.

Sesja nie zapisuje się w całości (?!)

0

Już mnie szlag jasny bierze.

Początek index.php:

session_start();
include 'mysql.php';
include 'User.php';
$user = mysql::loadUser();
if ($user != null) {
 $_SESSION['user'] = serialize($user);
 $_SESSION['logged'] = 1;
}
else {
 $_SESSION['user'] = null;
 $_SESSION['logged'] = 0;
}

I inny plik:

session_start();
include 'User.php';
if ($_SESSION['logged'] == 1) {
 echo unserialize($_SESSION['user']);
}

I na linii echo unserialize($_SESSION['user']); błąd. Okazuje się, że $_SESSION['user'] jest równy... null.

Potrafi ktoś to wyjaśnić i mi jakoś pomóc?

EDYTA:
Jeszcze weselej.

isset($_SESSION['user'])

w obydwóch plikach zwraca 1.

EDYTA 2:
Teraz jest już naprawdę wesoło.

if ($_SESSION['isLogged'] == 1 && isset($_SESSION['user'])) {
        echo "used";
        $user = unserialize($_SESSION['user']);
}

W oknie przeglądarki wyświetla się "used", a zaraz potem... Warning: unserialize() expects parameter 1 to be string, object given.

1

masz tam błąd, tak.. ale składniowy... (niezamknięty nawias).

nie śledziłem Twojej kariery w php, ale skoro nie odróżniasz błędu z wykonaniem funkcji od błędu składniowego to jeszcze długa droga przed Tobą ;)

przenoszę do Newbie + raczej unikaj stosowania serialize. w zasadzie to nigdy tego nie stosuj, ew. po 5 latach doświadczenia jak będziesz wiedział, że koniecznie tego potrzebujesz - to sobie użyj.

a w tym momencie jak chcesz serializować arraya (po co? w sesji możesz mieć arraye normalnie) to użyj json_encode i potem json_decode

edit: funkcja var_dump Twoim przyjacielem

0

Ajć. Ale w kodzie tego nie ma, spisywałem z pamięci. I nie serializuję arraya, tylko jedną z wartości wewnątrz.

0

Ale w kodzie tego nie ma, spisywałem z pamięci

a po co? żeby wprowadzać nas w błąd czy marnować swój czas? :D

I nie serializuję arraya, tylko jedną z wartości wewnątrz.

przecież $user strzelam że to array (ew. obiekt), żadna "jedna z wartości arraya" :p z kodu tak nie wynika

0

No tak, zastąpiłem serializację własną funkcją i wszystko działa. BTW, nie wiem, kto wymyślił odwoływanie się metody do pól składowych, zmuszając do użycia $this->nazwa zamiast $nazwa, ale jest to co najmniej irytujące.

0
ShookTea napisał(a):

No tak, zastąpiłem serializację własną funkcją i wszystko działa. BTW, nie wiem, kto wymyślił odwoływanie się metody do pól składowych, zmuszając do użycia $this->nazwa zamiast $nazwa, ale jest to co najmniej irytujące.

tak powinno być. przynajmniej nie ma dwuznaczności

1 użytkowników online, w tym zalogowanych: 0, gości: 1