Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]Sesje nie zapisują wartości
Forum PHP.pl > Forum > Przedszkole
iVorIus
Mam bardzo dziwny problem, pierwszy raz coś takiego się dzieje.
Mianowicie, przy logowaniu nadaję wartość $_SESSION['log'] = 1, po odświeżeniu strony sesji log już nie ma, pustka, po prostu zero..
Na początku skryptu jest session_start() .

Macie pomysł jak rozwiązać ten problem?
MateuszS
Na pewno w pierwszej linijce od razu masz session_start(); ? Obsluga sesji czynna? Warunek zeby zapisala sie wartosc 1 do $_SESSNION['log'] jest spelniony? Usun all i sprobuj przypisac jakas wartosc zmiennej potem ja wyswietl
iVorIus
W pierwszej linijce, obsługa jest czynna, warunek jest spełniony (dodatkowy komunikat, który informuje o spełnieniu warunku).
Gdy od razu po session_start przypisze wartość zmiennej, jest okej.

Teraz sprawdzając jak przypisuje zmienne itp. wychodzi na to, że przypisuje "na chwile" wartość, po odświeżeniu strony ją gubi..

Tak to wygląda:
  1. if( $p == 'login' )
  2. {
  3. if( $_POST['login'] != '' && $_POST['pass'] != '' )
  4. {
  5. $row = mysql_fetch_assoc(mysql_query("SELECT pass FROM users WHERE login = '" . $_POST['login'] . "'"));
  6.  
  7. if( $row['pass'] == $_POST['pass'] )
  8. {
  9.  
  10. $_SESSION['log'] = 1;
  11.  
  12. info('ok', 'Zalogowano pomyślnie :)');
  13.  
  14. }else{
  15. info('error', 'Nie udało się zalogować.');
  16. }
  17.  
  18. }else{
  19. info('error', 'Podaj login i hasło.');
  20. }
  21. }


Literówek nie zauważyłem, może źle myślę pisząc if'y i przepływy sterowania...
Makciek
a ciasteczka masz włączone?

EDIT
a nie lepiej zamiast
if($costam != ''){}
dać
if(!empty($costam)){}

EDIT2
co to za funkcja
info();
tongue.gif
twoja? bo manual najwyraźniej jej nie zna i ja też tongue.gif
iVorIus
Ciastka włączone, sprawdziłem, jest ciastko PHPSESSID z wartością id sesji.

Przyzwyczaiłem się do $cos != '' , ale czy to wpływa na sesje ?

Tak, moja:
  1. function info($class, $info)
  2. {
  3. echo '<div class="' . $class . '">' . $info . '</div>';
  4. }


Często się przydaje winksmiley.jpg
Makciek
spróbuj metody print it tongue.gif
czyli każdą zmienną po każdym if-ie wy-echo-j tongue.gif

Edit
a może po prostu $p nie równa sie login?
co to w ogóle jest $p?
to jest coś w stylu $_GET['action']?
iVorIus
Print it nic nie pokazuje - sesja jest pusta.

$p = $_GET['p'];
A $p == 'login' działa, ponieważ wyświetla się komunikat, o zalogowaniu i echując $_SESSION['log'], wyświetla ją, ale tylko na index.php?p=login, gdy przechodzę na inne podstrony, już sesja log jest pusta.

Ciastka włączone, sprawdziłem, jest ciastko PHPSESSID z wartością id sesji.

Przyzwyczaiłem się do $cos != '' , ale czy to wpływa na sesje ?

Tak, moja:
  1. function info($class, $info)
  2. {
  3. echo '<div class="' . $class . '">' . $info . '</div>';
  4. }


Często się przydaje winksmiley.jpg
Edit:


Rozwiązałem problem biggrin.gif biggrin.gif biggrin.gif Zapisuje sesje, wszystko działa jak należy, Wujek Google doradzi + oczywiście odrobina myślenia tongue.gif
Dla osób, które napotkają podobny problem:

1. Na początku pliku miałem literówkę, session_start zamiast session_start();
Teraz zapisywanie w if'ie działa, ale pomimo ob_start() i ob_end_flush() wykazywało error:
Cytat(wrrrrrr...)
Warning: session_start() [function.session-start]: Cannot send session cookie - headers already sent by (output started at usr\index.php:1) in c:\usr\krasnal\www\projekty\notatki\index.php on line 3

Warning: session_start() [function.session-start]: Cannot send session cache limiter - headers already sent (output started at usr\index.php:1) in c:\usr\krasnal\www\projekty\notatki\index.php on line 3

2. Cytat ze strony PHPedia.pl:
Cytat(phpedia.pl)
przykład 3 - Mediawiki i kodowanie utf8 w plikach rozszerzeń

Komunikat "Cannot add/modify header information - headers already sent by..." może pojawić się w przypadku korzystania z edytora (np. Editpad) do edycji plików php domyślnie stosującego kodowanie utf8. W przypadku gdy zapiszemy plik w kodowaniu utf8, zostaną przesłane dodatkowe znaki znajdujące się na początku pliku i nie widoczne w edytorze.

Dodawanie rozszerzenia w mediawiki:

<?
include("extensions/articletocategory.php");

Rozwiązaniem jest otwarcie pliku articletocategory.php i zmiana jego kodowania, na przykład na latin2, co spowoduje usuniącie tych dodatkowych niewidocznych znaków, przez które pojawiaś się komunikat o wysłanym już nagłówku.


Aktualnie korzystam z Notepad++, który jak wyżej wspomniany Editpad, dodaje na początku pliku informacje o kodowaniu utf-8. Gdy zmieniłem kodowanie na ANSI wszystko zaczęło działać, hulać pełną parą biggrin.gif

I tak się dziś z Wami żegnam, wracam do pracy, Pozdrawiam smile.gif
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.