Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: dziwaczne zachowanie sesji w klasie.
Forum PHP.pl > Forum > Przedszkole
shpack
Otóż.. napisałem dość prosty i prymitywny skrypt logowania uzytkownikow oparty na klasie, skrypt ten bez problemu uruchomilem na wlasnym komputerze, gdzie php ma wersje 4.3.10. Wszystko chodzilo pieknie i gladko dopoki nie wstawilem tego na serwer hostingowy. Wersja php serwera: 4.3.11. To samo na drugim serwerze, wersja 4.4.1 .

Problem przedstawia sie nastepujaco: po wejsciu na strone otrzymujemy formularz logowania, ktory po poprawnym zalogowaniu przenosi nas na strone panelu. Powstaje sesja ['user'] zawierajaca ID, LOGIN i PASS uzytkownika. Po przejsciu do innej podstrony, obojetnie jakiej, albo chociazby odswiezeniu, sesja ['user'] staje sie, lub raczej zaczyna przechowywac obiekt (!), a poniewaz skypt nie znajduje danych uzytkownika, przeniesieni zostajemy do strony logowania.

Po wypisaniu var_dump otrzymujemy:

Kod
array(1) { ["user"]=> &object(__PHP_Incomplete_Class)(4) { ["__PHP_Incomplete_Class_Name"]=> string(5) "users" ["user_id"]=> string(1) "1" ["user_password"]=> string(32) "e6a52c828d56b46129fbf85c4cd164b3" ["user_login"]=> string(5) "admin" } }


Po ponownym zalogowaniu wprawdzie ponownie przenosimy sie na strone panelu ale nie jest ona wyswietlana, gdyz pojawia sie nastepujacy blad:

Kod
Fatal error: Call to a member function on a non-object in /home/tips/domains/tips.nuh.pl/public_html/admin/index.php on line 17


Nastepnie podaje zrodlo skryptow:

zrodlo pliku index.php
zrodlo pliku config/users.php

Plik config/config.php (includowany na poczatku index.php) zawiera jedynie polaczenie do bazy i jedna funkcje (ktora nie jest wykonywana, i a zachowanie skryptu po jej usunieciu jest dokladnie takie same). To samo z plikiem config/manager.php ktory zawiera jedynie dodatkowa klase (ktora rowniez nie jest w tym kodzie wykonywana i po jej usunieciu skrypt dzialal tak samo).

Poniewaz kilka osob probowali mi juz z tym pomoc, w akcie desperacji smiem sadzic, iz bledne zachowanie skryptu spowodowane jest bledem nowszych wersji php. Prosze o pomoc forumowiczow, z gory dziekuje.
ghostrider
problem prawdopodobnie polega na wywołaniu session_start()
przed includowaniem plików klasy.
najpier pliki, potem sesja:
  1. <?php
  2.  
  3. include("myclass.php");
  4.  
  5. ?>


a jak nie to serialise() i unserialize()
shpack
  1. <?php
  2. include 'config/manager.php'; 
  3. include 'config/users.php'; 
  4. include 'config/config.php'; 
  5.  
  6. ?>


najpierw pliki, potem sesja, dokladnie tak zrobilem i tak caly czas bylo. Odwrotnie tez probowalem, to samo.
ghostrider
w pliku klasy NIE wolno przerywać <?php ... ?> tak jak ty to robisz.
  1.  ?>
  2.  
  3.  <center>
  4.  <form method="POST" action="">
  5.  <b>Zaloguj</b><br>
  6.  Login:<input type="text" name="type_login"><br>
  7.  Hasło:<input type="password" name="type_password"><br>
  8.  <input type="submit" value="Zaloguj"></form>
  9.  </center>
  10.  
  11.  <?php
  12.  exit; 
shpack
Racja biggrin.gif Blad juz sie nie pojawia.

Ale tylko po czesci. Sesja po zalogwaniu, i przejsciu do jakiejs podstrony, a nastepnie kolejnym przejsciu - dalej staje sie czy raczej zaczyna przechowywac obiekt. Wtedy zostaje przeniesiony do panelu logowania. I dalej nie wiem czemu, a to jest niestety bardzo powazny blad.

A no i wlasnie zdaje sobie sprawe, ze po odswiezeniu dalej wyskakuje blad z odwolaniem do zmiennej ktora nie jest obiektem. Totalna desperacja..
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.