Mizení novější části session – PHP – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu
Reklama
Reklama

Mizení novější části session – PHP – Fórum – Programujte.comMizení novější části session – PHP – Fórum – Programujte.com

 

Toto vlákno bylo označeno za vyřešené.
Hledá se programátor! Plat 1 800 € + bonusy (firma Boxmol.com)
VelkyBubak0
Newbie
19. 10. 2016   #1
-
0
-

Setkal se někdo z vás se situací, fungují jen před delší dobou deklarované proměnné ze $_SESSION a nově deklarované se ztratí?

Mám nastavenou $_SESSION v loginu (login.php) a hodnoty tam nastavené fungují všude kde je potřeba, díky

include_once "config.ses.php";

souboru, kde mimo třídy session je i volání session_start().

Dále mám nějaký seznam, který třídím podle hodnot, které ukládám do $_SESSION, v souboru animelist.php (který má také include toho souboru)

if ($_POST["nastavit_filtr_animelist"]) {
 //session_start();
 $_SESSION["filtr_animelist"]["vyber"]["anime"]=$_POST["anime"]+0;
 $_SESSION["filtr_animelist"]["vyber"]["hentai"]=$_POST["hentai"]+0; //session_write_close();
 if (!empty($_SERVER["HTTP_REFERER"])) {
  header("Location:$_SERVER[HTTP_REFERER]");
  exit;
 } else {
  URL($_POST["id_uzivatel"], "", "profil");
  header("Location:$cfg[s_sls]://$_POST[web]/animelist/uzivatele-$cfg[url_uri]");
  exit;
 }
}

Donedávna tam byla uvedena i nyní zakomentovaná volání, která ovšem ničemu nevadila (funguje to shodně ať jsou či nejsou zakomentována).

V tomto kódu jsem si ověřoval že se uvedené hodnoty (a klíče) $_SESSION opravdu nastaví, nicméně po přesměřování na výpis animelistu tato část $_SESSION neexistuje a funguje tedy jen část která byla již dříve nastavena v  login.php.

Nenapadlo by někoho, v čem by mohl být problém?

Nahlásit jako SPAM
IP: 94.113.158.–
Reklama
Reklama
Kit+11
Guru
19. 10. 2016   #2
-
0
-

#1 VelkyBubak
Možná byla překročena povolená velikost session.

Využívání hlavičky HTTP_REFERER nepovažuji za rozumné, může to způsobovat problémy.

V každém případě bys vždy měl vědět, zda jsi session_start() spustil nebo ne. Obávám se, že opětovným spuštěním je vytvořeno nové session a začnou se ztrácet data.

Je dobré do session ukládat spíše plochou strukturu a co nejméně dat, protože serializace košatého stromu je poměrně nehospodárná.

Nahlásit jako SPAM
IP: 194.228.13.–
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
VelkyBubak0
Newbie
20. 10. 2016   #3
-
0
-

Díky za tip, bohužel se nezdá že by to byl tento případ. Zkusil jsem zakomentovat jednu sadu (klíč+hodnota) z fungující části session a nechat nezakomentovanou jednu z nové části (u obou je hodnotou jediná číslice, takže bych myslel že budou stejně velké). Bohužel ani takto se nová část nezachovala. Navíc to ještě nedávno fungovalo. Bohužel netuším jak k této chybě došlo, proto pátrám, co by to mohlo způsobovat.

Nahlásit jako SPAM
IP: 94.113.158.–
peter
~ Anonymní uživatel
2539 příspěvků
20. 10. 2016   #4
-
0
-

Mas povolene v php.ini / .htaccess httpd.conf nebo kde se to nastavuje, vypis chyb? Pak by melo stacit pridat do programu error_reporting. Uplne nahoru nebo muzes pro jistotu d kazdeho php souboru, ktery s danym ma co docineni. Tez mozna dobre zminit, jake je tam php podle phpinfo().

@ini_set('error_reporting', E_ALL);
@ini_set("display_errors", "on");
error_reporting(E_ALL);

1. session ma limity velikosti
2. session se muze ztracet na starsim php a je treba to nejak obnovovat pres session_regenerate_id() (coz jsem zatim videl jen 2x asi z 1000 pripadu)
3. session_start pri jistem nastaveni php.ini (ini_set(), phpinfo()) vypisuje errory pri duplicitnim spusteni a kdyz pred startem vypises html kod (mezeru, novy radek a pod, problemy s utf-8 BOM). Melo by na to upozornit error_reporting
4. php v jistem nastaveni, superglobalni promenne, propoji $_SESSION, $_POST, $_GET do jedine promenne. Kteroukoliv zmenis, zmeni se vsechny.
5. $_SESSION["filtr_animelist"]["vyber"]["anime"] - tuto strukturu nemusi php akceptovat a vypsat chybu bez postupneho vytvoreni, $x = array(); $x['a'] = array(); $x['a']['b']=array(); ... Aspon, ja si to vzdycky hlidam pres isset nebo vytvorim strukturu predem prazdnou.
 

Nahlásit jako SPAM
IP: 2001:718:2601:26c:69f7:c1...–
peter
~ Anonymní uživatel
2539 příspěvků
20. 10. 2016   #5
-
0
-

Co se mohlo stalo? Hosting mohl upgradovat php. a nekdy se pri tom pomeni nastaveni a nekdy je to tak  bezpecnejsi.

Nahlásit jako SPAM
IP: 2001:718:2601:26c:69f7:c1...–
VelkyBubak0
Newbie
20. 10. 2016   #6
-
0
-

#5 peter
ad 1. ano, ale dají se obejít přez DB (a tam byla chyba)

Nahlásit jako SPAM
IP: 94.113.158.–
Zjistit počet nových příspěvků

Přidej příspěvek

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 38 hostů

Podobná vlákna

Gentoo - mizení souborů — založil Piskar10110010

Mizení nebo nečinnost oken — založil Noneus

Session — založil don_Dominique

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032016 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý