Autor Zpráva
Radek9
Profil
Ahoj. Udělal jsem si script na přihlašování přes cookies a sessions. Vše funguje v pořádku, ale když vypnu a zapnu prohlížeč, tak cookies z podivných důvodů již neexistují. Tady je script:
<?php
session_start();
$cookie_jmeno = $_COOKIE["jmeno"];
$cookie_heslo = $_COOKIE["heslo"];
$soubor = "index.php";
if($_GET["mode"]=="login") {
$_POST["jmeno"] = ucfirst(strtolower($_POST["jmeno"]));
$_SESSION["jmeno"] = $_POST["jmeno"];
$_SESSION["heslo"] = sha1($_POST["heslo"]);
setcookie("jmeno", $_POST["jmeno"]);
setcookie("heslo", sha1($_POST["heslo"]));
header("Location: ".$soubor."?action=login");
}
elseif($_GET["mode"]=="logout"){
session_unset();
setcookie("jmeno", "", time()-3600);
setcookie("heslo", "", time()-3600);
header("Location: ".$soubor."?mode=logout-final");
}
elseif($_GET["mode"]=="logout-final"){
session_unset();
header("Location: ".$soubor."?action=logout");
}
if(!empty($cookie_jmeno) and !empty($cookie_heslo)){
$_SESSION["jmeno"] = $cookie_jmeno;
$_SESSION["heslo"] = $cookie_heslo;
}
$login_jmeno = $_SESSION["jmeno"];
$login_heslo = $_SESSION["heslo"];
?>

Nevíte někdo, kde dělám chybu? Zkoušel jsem i upravit path, dobu platnosti a adresu kde cookies mají být, ale nic nepomohlo. Děkuji za každou pomoc.
tiso
Profil
Radek9: „Zkoušel jsem i upravit path, dobu platnosti a adresu kde cookies mají být, ale nic nepomohlo.
V uvedenom skripte to ale nastavené nemáš.
Radek9
Profil
tiso:
Nemám, protože to nefungovalo. Dělal jsem to takto:
time()+3600*24*365*100, "/", "localhost"
Radek9
Profil
Tak jsem to vyřešil tím, že jsem přidal platnost na 1 rok. 100 let asi nejde. Ale přesto... nevíte někdo jak to udělat abych nemusel zadávat platnost?
TomášK
Profil
100 let nejde, protože unixová epocha končí v roce 2038. Já bych to řešil tak, že si buď vytvořím nebo najdu vhodnou konstantu, která bude nastavená na nejvyšší možný timestamp, pojmenoval bych ji třeba FOREVER a dával tam jako datum expirace.
Radek9
Profil
TomášK:
protože unixová epocha končí v roce 2038
Hups... A co bude potom? :D
GeneralDv
Profil
Hups... A co bude potom? :D
To by mě taky zajímalo... možná to "obnověj" no... :D
Joker
Profil
Radek9:
Hups... A co bude potom? :D
http://xkcd.com/607/ :-)
karbon
Profil *
Hups... A co bude potom? :D
Podle mě se unix timestamp zvětší, takže bude mít mnohem vyšší datum (třeba se zvětší paměť o jeden bajt, to by mělo stačit).
zvěřiňák
Profil
Radek9
Může to být i nastavením prohlížeče, když se ti cookies vymažou při vypnutí a zapnutí prohlížeče. Ve FF úpravy - předvolby - soukromí - a zaškrtnuté políčko "Při ukončení aplikace Firefox vymazat důvěrná data".
tiso
Profil
zvěřiňák: tvoja odpoveď je irelevantná, problém sa už našiel.
zvěřiňák
Profil
tiso
No jó, příště musím pořádně číst.
Radek9
Profil
No nenašel... Já se v první řadě ptal jestli je možné to nastavit bez uvedené platnosti. Aby to tam prostě bylo navždy :D
tiso
Profil
Radek9: riešenie máš v [#5]
Radek9
Profil
Hele a teď mě napadá... Ten čas skončí 2147483647 a potom to jde -2147483648... -2147483647 atd. A nemohlo by být řešením potom použít:
time()+2147483648*2
?
Edit: Tak ne :D teď jsem to zkoušel a je to blbost.
Alphard
Profil
Radek9:
Má smysl snažit se tohle vymýšlet? Máte představu, co bude za třicet let? Jiné verze prohlížečů i PHP, možná úplně jiné technologie. Jestli váš web přečká takovou dobu, tak nepochybně projde několikanásobným refactoringem, který tento problém vyřeší moderním způsobem. Systémy uživatelů budou téměř jistě několikrát přeinstalovány a nikdo se pravděpodobně nebude obtěžovat se zálohou cookies.
Je to pro vás opravdu tak důležité, že budete den řešit jak to obejít, než abyste tam dal + 10 let a vyřešeno?
Radek9
Profil
No to je pravda... to jsem jentak zkoušel... a na ty cookies už jsem přišel:
setcookie("nazev", "hodnota", 2147483647); //což zapříčiní, že cookie bude platné do 19.01.2038

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: