Dane sesji PHP nie są zapisywane

Mam jedną z tych sytuacji "przysięgam, że nie dotknąłem serwera". Szczerze mówiąc, nie dotknąłem żadnego ze skryptów php. Problem, który mam, polega na tym, że dane php nie są zapisywane na różnych stronach lub odświeżane. Wiem, że nowa sesja jest tworzona poprawnie, ponieważ mogę ustawić zmienną sesji (np. $_SESSION['foo'] = "foo" i wydrukować ją z powrotem na tej samej stronie. Ale kiedy próbuję użyć tej samej zmiennej na innej stronie nie jest ustawiona! Czy są jakieś funkcje php lub informacje, których mogę użyć na moim serwerze hostów, aby zobaczyć, co się dzieje?

Oto przykładowy skrypt, który obecnie nie działa na serwerze moich hostów:

<?php
session_start();
if(isset($_SESSION['views']))
    $_SESSION['views'] = $_SESSION['views']+ 1;
else
    $_SESSION['views'] = 1;

echo "views = ". $_SESSION['views'];
echo '<p><a href="page1.php">Refresh</a></p>';
?>

Zmienna 'views' nigdy nie jest zwiększana po odświeżeniu strony. Myślę, że to jest problem po ich stronie, ale najpierw chciałem się upewnić, że nie jestem kompletnym idiotą.

Oto phpinfo () dla serwera moich hostów (PHP w wersji 4.4.7): alt text

 55
Author: Ilmari Karonen, 2008-10-01

22 answers

Dzięki za wszystkie pomocne informacje. Okazuje się, że mój host zmienił serwery i zaczął używać innej ścieżki zapisu sesji niż /var/php_sessions, która już nie istnieje. Rozwiązaniem byłoby zadeklarowanie ini_set(' session.save_path','SOME WRITABLE PATH'); we wszystkich moich plikach skryptów, ale byłoby to uciążliwe. Rozmawiałem z gospodarzem i wyraźnie ustawili ścieżkę sesji na prawdziwą ścieżkę, która istniała. Mam nadzieję, że pomoże to każdemu, kto ma problemy ze ścieżką sesji.

 41
Author: Crackerjack,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-10-01 21:57:04

Sprawdź, czy nie mieszasz https://z http://. Zmienne sesji nie przepływają między sesjami bezpiecznymi i niezabezpieczonymi.

 12
Author: paul,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-10-25 01:38:28

Miałem ten sam problem - to co mi się przydarzyło to zmiana sesji przez administratora serwera.cookie_secure boolean to On, co oznacza, że pliki cookie będą wysyłane tylko przez bezpieczne połączenie. Ponieważ plik cookie nie został znaleziony, php tworzyło nową sesję za każdym razem, więc zmienne sesji nie były widoczne.

 9
Author: Shane N,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-10-11 16:16:45

Użyj phpinfo() i sprawdź ustawienia session.*.

Być może informacje są przechowywane w plikach cookie, a twoja przeglądarka nie akceptuje plików cookie, coś w tym stylu.

Sprawdź to najpierw i wróć z wynikami.

Możesz również wykonać print_r($_SESSION);, aby mieć zrzut tej zmiennej i zobaczyć zawartość....

Odnośnie Twojego phpinfo(), Czy session.save_path jest ważny? Czy twój serwer WWW ma dostęp do tego katalogu?

Mam nadzieję, że to pomoże.
 7
Author: vIceBerg,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-08-10 06:30:22

Miałem następujący problem

Indeks.php

<?
    session_start();
    $_SESSION['a'] = 123;
    header('location:index2.php');
?>

Indeks2.php

<?
  session_start();
  echo $_SESSION['a'];
?>

Zmienna $_SESSION['a'] nie została ustawiona poprawnie. Wtedy zmieniłem index.php akordowo

<?
    session_start();
    $_SESSION['a'] = 123;
    session_write_close();
    header('location:index2.php');
?>

Nie wiem co to wewnętrznie oznacza, po prostu tłumaczę sobie, że zmiana zmiennej sesji nie była wystarczająco szybka:)

 6
Author: harry,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-05-30 07:52:32

Sprawdź, czy ścieżka zapisu sesji jest zapisywalna przez serwer WWW.

Upewnij się, że masz włączone ciasteczka.. (Zapominam kiedy je wyłączam aby coś przetestować)

Użyj Firefoksa z rozszerzeniem firebug, aby sprawdzić, czy plik cookie jest ustawiany i przesyłany z powrotem.

I na niepowiązanej uwadze, zacznij szukać php5, ponieważ php 4.4.9 jest ostatnim z serii php4.

 5
Author: DGM,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-10-01 02:23:22

Sprawdź, kim jest grupa i właściciel folderu, w którym działa skrypt. Jeśli identyfikator grupy lub identyfikator użytkownika są błędne, na przykład ustawiony na root, spowoduje to, że sesje nie będą prawidłowo zapisywane.

 3
Author: buzzy blogger,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-04-11 09:15:41

Sprawdź wartość "views" przed jej zwiększeniem. Jeśli z jakiegoś dziwacznego powodu zostanie ustawiony na ciąg znaków, to po dodaniu do niego 1 zawsze zwróci 1.

if (isset($_SESSION['views'])) {
    if (!is_numeric($_SESSION['views'])) {
        echo "CRAP!";
    }
    ++$_SESSION['views'];
} else {
    $_SESSION['views'] = 1;
}
 2
Author: nickf,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-10-01 02:06:09

Cóż, możemy wyeliminować błąd kodu, ponieważ testowałem kod na własnym serwerze (PHP 5).

Oto co warto sprawdzić:

  1. Czy wywołujesz session_unset () lub session_destroy () w dowolnym miejscu? Funkcje te natychmiast usuwają dane sesji. Jeśli umieszczę je na końcu mojego scenariusza, zaczyna zachowywać się dokładnie tak, jak opisujesz.

  2. Czy działa tak samo we wszystkich przeglądarkach? Jeśli działa na jednej przeglądarce, a nie innej, możesz mieć problem z konfiguracją w niefunkcjonującej przeglądarce (tzn. wyłączyłeś pliki cookie i zapomniałeś je włączyć, lub blokujesz pliki cookie przez pomyłkę).

  3. Czy folder sesji można zapisać? Nie możesz tego przetestować za pomocą is_writable (), więc musisz przejść do folderu (z phpinfo () wygląda to jak /var / php_sessions) i upewnić się, że sesje są rzeczywiście tworzone.

 2
Author: Nathan Strong,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-10-01 04:36:39

Jeśli ustawisz sesję w php5, spróbuj ją odczytać na stronie php4, może nie wyglądać we właściwym miejscu! Ustaw strony w tej samej wersji php lub ustaw session_path.

 2
Author: Harry,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-04-10 14:50:58

Spędziłem wieki szukając odpowiedzi na podobny problem. Nie był to problem z kodem lub konfiguracją, ponieważ bardzo podobny kod działał idealnie w innym .php na tym samym serwerze. Okazało się, że problem był spowodowany bardzo dużą ilością danych zapisywanych w sesji na tej stronie. W jednym miejscu mieliśmy taką linię: $_SESSION['full_list'] = $full_list gdzie $full_list Była tablicą danych załadowanych z bazy danych; każdy wiersz był tablicą około 150 elementów. Kiedy Kod został początkowo napisany kilka wiele lat temu DB zawierało tylko około 1000 wierszy, więc $full_list zawierało około 100 elementów, z których każdy był tablicą około 20 elementów. Z czasem 20 elementów zamieniło się w 150, A 1000 wierszy w 17000, więc kod zapisywał w sesji blisko 64 megabajty danych. Najwyraźniej, przy takiej ilości danych, odmówiła przechowywania czegokolwiek innego. Gdy zmieniliśmy kod, aby radzić sobie z danymi lokalnie bez zapisywania ich w sesji, wszystko działało idealnie.

 2
Author: Aleks G,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-06-21 16:32:33

Znam jedno rozwiązanie, które znalazłem (OSX z Apache 1 i właśnie przełączyłem na PHP5), gdy miałem podobny problem, że wyłączenie 1 konkretnego klucza (ie unset($_SESSION['key']);) powodowało, że nie zapisywał. Jak tylko nie odłączyłem tego klucza, zapisałem go. Nigdy więcej tego nie widziałem, z wyjątkiem tego serwera na innej stronie, ale wtedy była to inna zmienna. Ani nic specjalnego.

Dzięki za ten Darryl. To mi pomogło. Kasowałem sesję zmienną, i z jakiegoś powodu nie pozwalała na zatwierdzanie sesji. teraz po prostu ustawiam go na null (co jest dobre dla mojej aplikacji) i działa.

 2
Author: nhahtdh,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-08-14 16:07:42

Znam jedno rozwiązanie, które znalazłem (OSX z Apache 1 i właśnie przełączyłem na PHP5), gdy miałem podobny problem, że wyłączenie 1 konkretnego klucza (ie unset($_SESSION['key']);) powodowało, że nie zapisywał. Jak tylko nie odłączyłem tego klucza, zapisałem go. Nigdy więcej tego nie widziałem, z wyjątkiem tego serwera na innej stronie, ale wtedy była to inna zmienna. Ani nic specjalnego.

 1
Author: Darryl Hein,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-10-01 05:52:31

Oto jeden częsty problem, którego nie widziałem w innych komentarzach: czy twój host uruchamia jakąś pamięć podręczną? Jeśli są one automatycznie buforowania wyników w jakiś sposób można uzyskać tego rodzaju zachowanie.

 1
Author: Stuart,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-10-01 07:18:27

Chciałem tylko dodać małą uwagę, że może to również wystąpić, jeśli przypadkowo przegapisz instrukcję session_start () na swoich stronach.

 1
Author: ,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-05-31 14:11:38

Ustawiłem ścieżkę pliku cookie sesji na "//" zamiast "/". Firebug jest niesamowity. Mam nadzieję, że to komuś pomoże.

 1
Author: Slawa,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-07-12 14:13:42

Miałem ten problem przy korzystaniu z bezpiecznych stron skąd przychodziłem www.domain.com/auth.php które Przekierowano do domain.com/destpage.php. usunąłem www z auth.PHP link i zadziałało. To mnie rzuciło, ponieważ wszystko działało inaczej; sesja nie była ustawiona, gdy przyjechałem do miejsca docelowego.

 1
Author: Sean Anderson,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-01-12 18:02:03

Częstym problemem często pomijanym jest również to, że nie może być innego kodu ani dodatkowego odstępu przed poleceniem session_start ().

Miałem ten problem już wcześniej, gdy miałem pustą linię przed session_start (), co spowodowało, że nie działa poprawnie.

 1
Author: hyarion,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-06-20 10:58:26

Dodanie mojego rozwiązania:

Sprawdź czy masz dostęp do poprawnej domeny . Używałem www.mysite.com, aby rozpocząć sesję i próbowałem ją otrzymać od mysite.com (Bez www).

Rozwiązałem to dodając przepisanie htaccess wszystkich domen do www, aby być na bezpiecznej stronie / stronie.

Sprawdź również, czy używasz http lub https.

 1
Author: Kai Noack,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-10-03 14:35:50

Edytuj swoje php.ini.
Myślę, że wartość sesji.gc_probability ma wartość 1, więc ustaw ją na 0.

session.gc_probability=0
 1
Author: emaniacs,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-01-16 04:09:40

Sprawdź, czy używasz session_write_close (); gdziekolwiek, używałem tego zaraz po kolejnej sesji, a następnie próbowałem napisać do sesji ponownie i to nie działało.. więc po prostu skomentuj, że sh * t out

 0
Author: ,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-07-31 11:43:56

Jeszcze kilka rzeczy, które musiałem zrobić(miałem ten sam problem: brak retencji sessona po aktualizacji PHP do 5.4). Wielu nie potrzebuje tych, w zależności od tego, co php twojego serwera.ini contains (check phpinfio ());

session.use_trans_sid=0 ; Do not add session id to URI (osc does this)
session.use_cookies=0;  ; ensure cookies are not used
session.use_only_cookies=0 ; ensure sessions are OK to use IMPORTANT
session.save_path=~/tmp/osc; ; Set to same as admin setting
session.auto_start = off; Tell PHP not to start sessions, osc code will do this

Zasadniczo Twoje php.ini powinno być ustawione na brak plików cookie, a parametry sesji muszą być zgodne z tym, czego chce osc.

Może być również konieczna zmiana kilku fragmentów kodu sesji w application_top.php-tworzenie obiektów, których nie ma w tep_session_is_registered(...) połączenia (np. obiekt nawigacyjny), ustawić zmienne $HTTP_ na nowsze $_SERVER i kilka innych testów isset dla pustych obiektów (google dla info). Skończyło się na tym, że mogłem korzystać z oryginalnych sesji.Pliki php (includes / classes I includes/functions) z nieco zmodyfikowanym application_top.php, aby wszystko zaczęło się od nowa. Php.ustawienia ini były głównym problemem,ale to oczywiście zależy od tego, co Twoja firma serwerowa zainstalowała jako domyślne.

 0
Author: Pete855217,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-10-04 10:29:04