Autor Zpráva
Jata
Profil
Mám takovej problém, mam normálně udělaný přihlašovací formulář přes session a funguje perfektně, ale chtěl jsem lidem ušetřit práci a tak jsem se rozhodl, že udělam automatické přihlašování, vim jak to chci udělat, do přihlašovacího formuláře jsem dal zaškrtávací políčko s názvem autologin a po přihlášení se normálně nastaví session a uloží cookies pro další návštěvu až sem mi to funguje, když zavřu prohlížeč a znovu otevřu stránku, tak se chová jako kdyby ty cookies nikdy nebyly uložené. Jinak tam mam taky i to, že když jsou cookies už nastavené tak se automaticky přihlásí, ale prostě mi to nefunguje, už jsem v koncích. Díky
pmasarik
Profil
Máš to určite robené cez sessions a tie sa zmažú zo servera po určitom čase, alebo po zavretí prehliadača.
V cookies je uložené len SID danej session a to môžeš ovplivniť na ako dlho.
Horšie je to ale s ovplivnením uloženia sesion na servery, ale toto mi ako tak funguje.

$expiretime = 60*60*6; // 6 hodin // 60*60*24*100 = 100 dní
##########################################
session_cache_limiter('private');
$cache_limiter = session_cache_limiter();
#########################################
session_cache_expire($expiretime);
$cache_expire = session_cache_expire();
#########################################
session_set_cookie_params($expiretime);// týmto nastavíš čas uloženia cookies
Jata
Profil
Mam to udělaný tak, že když prostě neexstujou žádný cookies tak si normálně najde username a heslo v databázi a dotyčnýho přihlásí ale to je jenom na tu jednu návštěvu a když zaškrtne automatické přihlášení tak se během toho klasickýho přihlášení ještě vytvoří cookies a mělo by to fungovat tak, že když tam příjde příště a jsou vytvořený cookies tak podle obsahu cookies vyhledaá dotyčnýho v databázi a pomocí session zase přihláší.
Glacier
Profil
Já to dělám tak že po zaškrtnutí políčka se uloží zakódované jméno dotyčného do cookies se jménem např. Auto-login. Při dalším příchodu zkontrloluji jestli existuje cookie s názvem Auto-login. pokud ano, najdu v db. Uživatele jehož jméno po zakódování vypadá stejně jako ten kód v cookie (je to pomalý ale kdž neni moc uživatelů....) a vytvořim pro něj session (automaticky ho přihlásim).
Jata
Profil
Přesně jako to má Glacier to mam udělaný, ale nefunguje mi to.
Glacier
Profil
Tak nejdřív vyzkoušej jestli se cookie vůbec vytvoří - píšeš že ano, tak se koukni také po restartu prohlížeče, jestli tam toto cookie je. Pokud tam po restartu neni tak máš někde v prohlížeči nastavené aby je mazal, pokud tam je tak hledej chybu v php kódu. Víc ti poradit nedokážu.
Tomik
Profil
Myslím, že pokud by jsi, Jato, zveřejnil kus problematického kódu, spíše by ti někdo poradil.
Jata
Profil
Jenže když to tak vezmu tak kód problematickej neni kde by to házelo chybu, ale tady je všechno důležitý:

Přihlašovací formulář:
<?php

if (!$_SESSION["username"]) {
echo '<form action="login.php" method="post">
<p>Username:</p><p><input type="text" name="jmeno" size="25"
style="height:12px; border:1px solid black; font-size:10px;
background-color:#FEFDF3;"></p>
<p>Heslo:</p><p><input type="password" name="heslo" size="25"
style="height:12px; border:1px solid black; font-size:10px;
background-color:#FEFDF3;"></p>
<p class="date">&nbsp;</p>
<p><input type="checkbox" name="autologin" value="ano"> Automatické
přihlášení</p>
<p class="date">&nbsp;</p>
<p><input type="hidden" name="back" value="fanklub.php"><input
name="ok" type="submit" value="Přihlásit" style="height:15px; border:1px
solid black; font-size:10px; background-color:#FEFDF3;"></p></form>
<p class="date">&nbsp;</p>
<p class="font10px"><a href="register.php">&raquo; Registrace nového
člena</a></p>';
}
else {
echo '<div style="padding-left:10px;"><strong>Přihlášen:</strong> '; echo
$_SESSION["username"]; echo'
<p style="date">&nbsp;</p>
<p>[ <a href="logout.php">odhlásit</a> ]&nbsp;&nbsp;[ <a
href="fanklub.php">nastavení</a> ]</p></div>';
}
?>


Zpracování přihlášení
<?php

session_start();

if ($ok) {

// najít heslo v databázi
mysql_connect("localhost","xxxxxxx","xxxxxx");
mysql_select_db("xxxxxxxxxx");
$sql = "select password from fanusers where username = '$jmeno'";
$res = mysql_query($sql);
if ($res && mysql_num_rows($res) && md5($heslo)==mysql_result($res,0)) {
$_SESSION["username"] = $jmeno;
$result=MySQL_Query("SELECT * FROM fanusers WHERE username =
'$jmeno'");
while($zaznam=MySQL_Fetch_Array($result)) {
$nejhrad=$zaznam[nejhrad];
$nejjednotka=$zaznam[nejjednotka];
$icq=$zaznam[icq];
$nejskore=$zaznam[nejskore];
$id=$zaznam[id];
$realname=$zaznam[realname];
$email=$zaznam;
$qbcount=$zaznam[qbcount];
$newscount=$zaznam[newscount];
$qbrefresh=$zaznam[qbrefresh];
$heslo22=$zaznam[password];
$_SESSION["id"] = $id;
$_SESSION["nejhrad"] = $nejhrad;
$_SESSION["nejskore"] = $nejskore;
$_SESSION["nejjednotka"] = $nejjednotka;
$_SESSION["realname"] = $realname;
$_SESSION["icq"] = $icq;
$_SESSION["email"] = $email;
$_SESSION["qbrefresh"] = $qbrefresh;
$_SESSION["newscount"] = $newscount;
$_SESSION["qbcount"] = $qbcount;
if ($autologin=="ano") {
setcookie("jmeno", $jmeno);
setcookie("heslo", $heslo22);
}
}
Header("Location: index.php");
exit;
}
else
$chyba = true;
}
?>


Pokud jsou cookies:
<?php

session_start();

if ($HTTP_COOKIE_VARS["jmeno"]!="" && $HTTP_COOKIE_VARS["heslo"]!="")
{
$cookie_jmeno=$HTTP_COOKIE_VARS["jmeno"];
$cookie_heslo=$HTTP_COOKIE_VARS["heslo"];
mysql_connect("localhost","xxxxxxx","xxxxxxxx");
mysql_select_db("xxxxxxxxxx");
$sql = "select password from fanusers where username = '$cookie_jmeno'";
$res = mysql_query($sql);
if ($res && mysql_num_rows($res) && md5($cookie_heslo)==mysql_result($res,0)) {
$_SESSION["username"] = $cookie_jmeno;
$result=MySQL_Query("SELECT * FROM fanusers WHERE username =
'$cookie_jmeno'");
while($zaznam=MySQL_Fetch_Array($result)) {
$nejhrad=$zaznam[nejhrad];
$nejjednotka=$zaznam[nejjednotka];
$icq=$zaznam[icq];
$nejskore=$zaznam[nejskore];
$id=$zaznam[id];
$realname=$zaznam[realname];
$email=$zaznam;
$heslo22=$zaznam[password];
$_SESSION["id"] = $id;
$_SESSION["nejhrad"] = $nejhrad;
$_SESSION["nejskore"] = $nejskore;
$_SESSION["nejjednotka"] = $nejjednotka;
$_SESSION["realname"] = $realname;
$_SESSION["icq"] = $icq;
$_SESSION["email"] = $email;
}
}
}
?>
Jata
Profil
Jinak jsem to jestli cookies testoval tak, že po přihlášení kdy se měly vytvořit jsem je nechal vypsat a vypsali se správně.
Glacier
Profil
ale podívej se do správce cookies (ve FF nástroje>možnosti>soukromí>cookies>správce cookies) jestli tam to cookie je i po restartu prohlížeče.
Jata
Profil
teď se na to nemůžu podívat, protože stahuju, ale zachvíli na to mrknu a potom řeknu.
Jata
Profil
tak jsem to zrestartnul a ty cookies se smažou, ale ostatní cookies tam mam, a neni to třeba tím, že to mam na localhostu?
Glacier
Profil
spíš při vytváření cookies musíš nastavit správně jejich platnost
Jata
Profil
musí se ta platnost tam dávat?
Glacier
Profil
asi ano když to takhle nefunguje :-D
Jata
Profil
tak jsem tam tu platnost dal, cookies zůstali, ale nepřihlásilo to
Glacier
Profil
konkrétně to mám takto:
setcookie(auto_login,crypt($row[id],'neco'),time()+2592000,'/');
Jata
Profil
už mi to de!! super, přišel jsem na to, že jsem v proměný cookie_heslo měl heslo v MD5 a potom jsem ho ještě jednou zakódoval, takže to uživatele nenašlo, moc ti děkuju za pomoc a ochotu
Glacier
Profil
:-) vždycky to je nějaká pitomost.
Jata
Profil
ale chybyma se člověk učí, teď jsem zase o něco chytřejší a vim jak dobře použít cookies
Toto téma je uzamčeno. Odpověď nelze zaslat.

0