Autor Zpráva
joe
Profil
Zdravím,

asi jsem za tu chvíli, co jsem s PHP nedělal zapomněl základy, ale nechtějí mi fungovat sessions.

Nastíním situaci: na začátku se úspěšně nastartují a pak, pokud se odešle formulář, tak nastavím do sessions nějakou proměnnou a přesměruju pomocí header(); Ale po přesměrování v proměnné v sessions nic není. Nechápu to. Cookies mám zapnuté, nefunguje mi to ani na localhostu ani na serveru.
Neví někdo kde by mohla být zrada?

Díky
tiso
Profil
joe - z toho popisu neviem... Pokiaľ máš session_start a každej stránke ktorú si v popise problému spomínal tak by to malo fungovať.
joe
Profil
tiso
Popravdě, taky bych z toho popisu nebyl moudrý... ale, myslim si, že tam nic špatně nemám, tedy aspoň nic špatnýho nevidim, už asi půl hodiny do toho koukám a nechápu to.

Takhle to funguje:

session_start();
$_SESSION['i']++;
var_dump($_SESSION['i']);


A když přepíšu podobně jak to mám teď

session_start();
if(..post..) {
  $_SESSION['i'] = 'a';
  header(..);
  exit;
}

if(isset($_SESSION['i'])) { // a sem se to nedostane...
echo '...';
$_SESSION['i'] = null;
}


Je na tom snad něco logického špatně? (možná že v tom něco nevidím...)
Nox
Profil
joe
cože je v té podmínce? předpokládám, že se to tam nedostane, protože je splněná a redirectne se to
Alphard
Profil
Ten druhý kód máte přesně takhle? Jestli ano, musí zpracování nutně ukončit na 5. řádku (vzhledem k exit) a pokud není splněna první podmínka, tak zase není nastavená $_SESSION['i'].
Jestli jsou to úseky dvou různých kódů, tak u druhé ukázky chybí session_start a bylo by vhodné vkládat do pre samostatně, aby to bylo jasné.
joe
Profil
Nox
Tam je podmínka, jestli byl odeslaný formulář. Když je, tak se má něco uložit do sessions a redirectnout na tu samou stránku (aby nedocházelo k posílání dat znovu po F5). Problém je v tom, že pokud se to přesměruje, tak po přesměrování v té session nic není.

Alphard
To je všechno v jednom souboru. První podmínka (ř. 2) se vykoná jen pokud je fomulář odeslaný, pak se tedy má uložit session a přesměrovat. Tím pádem po přesměrování na tu samou stránku se podmínka (2) znovu nevykoná a má být splněna i podmínka (8), kde mi to ale pořád píše null. Nechápu. Ale možná v tom je něco logického špatně, je horko :(
Alphard
Profil
Nevím, mně to funguje, upravil jsem to do následující (univerzálnější) podoby:
<?php
session_start();
if(isset($_GET['start'])) {
  $_SESSION['i'] = 'a';
  header ("location: http://".$_SERVER['SERVER_NAME'].$_SERVER['SCRIPT_NAME'], TRUE, 303);
  exit;
}

if(isset($_SESSION['i'])) { // a sem se to dostane...
echo 'je to ok';
$_SESSION['i'] = null;
}
?>

Volam localhost/cesta/script.php?start=1 a dostanu výsledek "je to ok".
joe
Profil
Alphard
Když tohle samostatně uložím, tak mi to taky funguje. Nevím v čem je problém, že mi to nejde v tom mém kódu.
Oprášil jsem svůj framework a tam to jde normálně, i když se jedná vlastně jen o dvě jednoduché stránky, chtěl jsem to udělat jednoduše. Ale dál mě do toho koukat už nebavilo... však znáte to :) díky za pomoc.
Alphard
Profil
joe:
Když tohle samostatně uložím, tak mi to taky funguje. Nevím v čem je problém, že mi to nejde v tom mém kódu.
Změnil jsem jenom dvě věci, napsal jsem adresu pro přesměrování a dopsal první podmínku, tak hledejte tam.
stepanka
Profil *
joe
To už se mi stalo hodněkrát, chybu máš asi v nastavení serveru. Pokud si necháš vypsat phpinfo() a máš v řádku "Session Support" hodnotu "enabled" (pokud ne, může být chyba zde), tak nejspíš nema apache zapisovaci prava v adresari "/var/lib/php/session". Ten adresář se možná může trochu lišit, jeho přesnou cestu najdeš v phpinfo() na řádku session.save_path. Pokud nema Apache/PHP zapisovací práva pro tento adresář, tak si nemůže danou session zapamatovat.
joe
Profil
Alphard
Právě proto jsem psal, že to nechápu, proč takhle primitivní věc nefunguje. Ale už to mám funkční a jinak.

stepanka
Díky. Tím to nebylo, sessions normálně fungovaly, jen ne v tom případě jak jsem napsal. Když jsem to zkusil jinak, tak to ale šlo. Ale dobrý nápad, aspoň vím jaké další místa mám prozkoumat :)
stepanka
Profil *
joe
a kde byla teda chyba?
peta
Profil
error_reporting jako prvni radek a vypsalo by ti to chybu. Pravdepodobne prepisujes jiz uzavrenou header.
resident
Profil *
Mám podobný problém

  if(isset($_SESSION['nacteno']))
  {
      $nacteno=$_SESSION['nacteno'];
      echo "<a href=\"#top\">Stránka načtena:$nacteno</a>";
  }
  else echo "<a href=\"#top\">ještě nenavštívil</a>";
  
  
  $_SESSION['nacteno'] = time();


na prvním řádku mám session_start();
nepíše mi to žádný error ale nefunguje mi to.

potřebuji docílit jestli uživaetl už zobrazil nějakou stránku či nikoliv.
Keeehi
Profil
Kde je session_start? Nebo máš nastavené session.autostart na true?
resident
Profil *
úplně na začátku stránky jako 1 line.
Davex
Profil
resident:
úplně na začátku stránky jako 1 line
Jakto? Na prvním řádku skriptu snad máš <?php, ne? Doporučuji se odpíchnout od kódu [#7] Alpharda.

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: