Autor Zpráva
Lukyn5
Profil *
Ahoj, řeším již několik dní problém, který bude malinkatý, ale já ne a ne ho najít. Jedná se o problém se SESSION.

Pomocí toho HTML odesílám POST do souboru "prihlaseni":
<form id='form1' name='form1' method='post' action='prihlaseni'>
                Přihlášení:<br>
                <input type='password' name='heslo' id='textfield2' class='input1' />
                <input type='image' name='imagefield1' id='imagefield1' src='images/subpage1_06.gif' />
            <a href='registrace'>Registrace</a>
</form>


V souboru "prihlaseni" se nachází tento script, který má vytvořit SESSION:
<?php
if(!session_id())
session_start();

header("Cache-control: private");


if(isset($_POST['heslo']))
{
$db=mysql_connect('localhost','*****','*****') or die(mysql_error());
mysql_select_db('*****');

$_POST['heslo']= mysql_real_escape_string(strip_tags(trim($_POST['heslo'])));

$q= mysql_query("SELECT * FROM plat WHERE heslo='{$_POST['heslo']}'",$db) or die(mysql_error());

if(mysql_num_rows($q) > 0)
{
$_SESSION['heslo'] = $_POST['heslo'];
$login= "<p>Byl(a) jste úspěšně přihlášen(a).</p><meta http-equiv='refresh' content='3;url=index.php'>";
}
else
{
$login= "<p>Zadané heslo je bohužel neplatné. Zkuste je, prosím, zadat a znovu a nezapoměňte dbát na správnou velikost písmen (malá, velká) a nezaměňte nulu za velké písmeno O.</p>";
}

mysql_close($db);

}
echo $login;
?>


Tento script se zdá být z části funkční, jelikož existenci hesla v databázi ověřený správě, funguje správně a dokonce :-D, pokud si nechám vypsat pod echo echo $login; ještě echo $_SESSION['heslo'];, vypíše se mi zadané heslo -> správně. To znamená, že celý soubor je funkční.

Nyní je problém, že pokud ověřuji existenci SESSION na další stránce (na kterou mě refresh-oval script - viz výšše) tímto kódem:
<?php
if(!session_id())
session_start();

header("Cache-control: private");

$sesheslo = $_SESSION['heslo'];

if ($_SESSION['heslo']){
echo "<form id='form1' name='form1'>Jste přihlášen(a) jako:<br>$sesheslo<br><a href='odhlaseni'>Odhlásit se </a></form>";
}

else echo "<form id='form1' name='form1' method='post' action='prihlaseni'>
                Přihlášení:<br>
                <input type='password' name='heslo' id='textfield2' class='input1' />
                <input type='image' name='imagefield1' id='imagefield1' src='images/subpage1_06.gif' />
            <a href='registrace'>Registrace</a>
        </form>";
?>


Script se tváří, jako by v SESSION nic nebylo - vypíše else echo. Pokud si vložím na tuto stránku např. i zmíněné echo $_SESSION['heslo'];, nic se nevypíše (SESSION je prázdné nebo neexistuje).

Když to shrnu, jeví se mi zde problém, že buď mám někde chybu v zápisu SESSION (ale jakou, když ji script "prihlaseni" vytvori), nebo se z nejake duvodu jako by neuloží --> SESSION existuje jen na první stránce a po refreshu na index je již prázdná). Prosím, poraďte, jsem zoufalý.

Kdo tento problém vyřeší, čeká na něj překvapení :-D. Předem díky.
wise
Profil
Do hloubky o session moc nevím, ale: pokud v souboru prihlaseni "nastartujes" session už jednou, proč ho poté v dalších souboru (kam přesměrováváš), "startuješ" znovu?

Logicky by se o tomto dalo uvažovat.

Další je nasnadě problém s register_globals.
Lukyn5
Profil
Odstranění "startování" :-D to bohužel nevyřešilo.
mckay
Profil
Lukyn5:
Jen tak od prvního pohledu doporučuji naučit se psát tělo podmínek mezi složené závorky... lépe se ti v tom bude orientovat a pravděpodobně i nám, všem ostatním.

Mimochodem, nikdy jsem nepoužíval na začátku souboru to session_id();, celý i s tou podmínkou to tam odtud vyhoď, možná že to potom bude fachat.

wise:
Do hloubky o session moc nevím, ale: pokud v souboru prihlaseni "nastartujes" session už jednou, proč ho poté v dalších souboru (kam přesměrováváš), "startuješ" znovu?
V každém souboru, kde pracuješ se session by jsi ho měl mít nastartované.
Lukyn5
Profil
Neboj, vyzkoušeno i bez těch podmínek, jenom s
session_start();
mckay
Profil
Lukyn5:
Teď už jenom hádám - ale co ta hlavička, zkoušel jsi ji oddělat?
wise
Profil
Yep, omlouvám se moje chyba :) Napsal jsem blbost.

Nicméně zkus jít vylučovací metodou:

odstranit hlavičku
odstranit session_id (nikdy jsem nepoužíval)
zkusit změnit typ přesměrování např. na js

popř. si vypsat celý session, ikdyž to nejspíš nebude ono. Ale zkusit můžem vše
foreach($_SESSION as $k => $v) echo $k . " - " . $v . "\n";
Lukyn5
Profil
Co si představujete pod odstraněním hlavičky?

Nyní script vypadá takto:
<?php
session_start();

if(isset($_POST['heslo']))
{
...


při vypsáni session zmíněným kódem je výstup na "prihlaseni": heslo - 1234

Na indexu nic.
tiso
Profil
Lukyn5:
if(false == session_start()){die('Nepodarilo sa vytvoriť session, asi mám niekde výstup (napríklad BOM), kde by nemal byť');}
Lukyn5
Profil
tiso:
nepomohlo :(
Davex
Profil
Požadavky s posílanými Cookies by se kešovat neměly, ale jak to vypadá ve Firebugu - načte se ta stránka po přesměrování z keše prohlížeče nebo opravdu ze serveru? Vynucené vypnutí kešování (na té stránce, kde sessions chybí) by po vymazání keše v prohlížeči nepomohlo?
header("Cache-control: no-cache, max-age=0");
Lukyn5
Profil
Do jakého souboru mám tento kód vložit? "prihlaseni" nebo "overeni"

Jak se maže cash, opravdu nevím - používám FF
Davex
Profil
Lukyn5:
Do jakého souboru mám tento kód vložit? "prihlaseni" nebo "overeni"
Preventivně třeba i do obou a zakomentuj header("Cache-control: private");

Jak se maže cash, opravdu nevím - používám FF
Nástroje / Vymazat nedávnou historii... - Vyrovnávací paměť
imploder
Profil
Lukyn5:
Mně to v osekané podobě funguje, můžeš si to vyzkoušet u sebe: ses.zip
Lukyn5
Profil
imploder:
Z toho souboru mě to funguje také. Tak kde je problém?
Lukyn5
Profil
Tak jsem problém našel sám, teď přijít na to, jak ho "hezky" vyřešit. Pokud upravím přihlašovací formulář aby nesměřoval na "prihlaseni", kde ho .htaccess kvůli mod rewrite převedce na index.php?stranka=prihlaseni a zde ho v indexu zpracuje tento kod

if ($_REQUEST['stranka'] == 'prihlaseni' ) { include ("login.php"); };


a namísto tohoto postupu použiji přímo cestu z formuláře na login.php, tak script funguje a i v indexu se zobrazí informace o přihlášení. Tedy zcela funkční. Problém je, jak tedy script zakomponovat do webu - nyní se prostě zobrazí na bílé stránce.

Díky za pomoc.
Lukyn5
Profil
Tak provizorně jsem to vyřešil směřováním formuláře na index.php?stranka=prihlaseni

Beru to jako vyřešené, moc všem děkuji za pomoc, ale kdyby někdo přišel na nějaké super řešení, rád použiji.

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:

0