session_start() az po loginu
Zdravim!
V ramci optimalizace webu premyslim, ze session budu inicializovat az v momente, kdy se overi uzivatel, ne pro vsechny.
Uvod je primitivni, proste:
Kód:
if($_GET['action'] == 'login'){
$query = mysql_query( "SELECT ...... " );
while($user = mysql_fetch_array($query)){
session_start();
$_SESSION['login'] = $_POST['login'];
atd...
}
}
problem je nasledujici - logicky po akci loginu to redirectuje na index.php, kde samozrejme musim taky nastartovat sessions, jak ale zjistim, ze to mam nastartovat? Lamu si nad timto hlavu a porad nemuzu na nic prijit. Mam totiz pevnou hlavicku, ta akce loginu je samozrejme nad ni kvuli session cookies. Mam dojem, ze by to slo udelat jenom za predpokladu, ze hlavicka by nebyla staticka napr. index.php?page=login ale ty soubory, ktere jsou pouze v privatni casti, by na zacatku mely to session_start() - zkratka bylo by to napr. login.php, users.php apod. Diky za jakekoliv napady.
Re: session_start() az po loginu
A co to udelat tak, ze pokud se uzivatel uspesne priloguje, redirektovat ho na index.php a v neuspesnem pripade ho redirektovat na login.php ?
Re: session_start() az po loginu
No mam pocit, že nic takovýho neexistuje. Prostě jí znova nastartuj. Myslim, že to hlásí jenom Notice: Session allready started (sem si vymyslel). Takže buď ještě vypnout hlášení poznámek nebo použít lokální potlačení hlášek @session_start();
Re: session_start() az po loginu
A co tohle?
Kód:
if (!isset($_SESSION)) {Session_start();}
Re: session_start() az po loginu
Re: session_start() az po loginu
Citace:
Původně odeslal Hardman
V ramci optimalizace webu premyslim, ze session budu inicializovat az v momente, kdy se overi uzivatel
A jaky je to problem? Vzdit stci udelat jen podminku misto toho cyklu ne?
treba nejak takhle
Kód:
if (mysql_num_rows($result) == 0) return;
$user = mysql_fetch_object($result);
session_start();
$_SESSION["user"] = $user -> name;
$_SESSION["passwd"] = $user -> passwd;
Jinak bych tu SESSION startoval nekde mimo tzn.: ne v index.php ale treba login.php kde se provedou prislusna overeni a pak redirekt na index.php nebo na neco jineho, kde jeste pred hlavickama bude metoda, ktera bude overovat zda nevyprselo casove kvantum, ktere dostal treba 15 min. (900 sec.) popripade muzes overovat i jina data dle obsahu SESSION.
IMHO ten while cyklus je to same to co jsem napsal ja. Nevidim v nem zadnou zavaznou chybu, ktera by se mela menit (optimalizovat) az na to ze je obsolote.
EDIT:
neco rychleho. :-)
soubor login.php
Kód:
<?php
if (!isset($_POST["logingOn"])) return; // poslu ho do haje pokud to neslo z meho logovaciho formulare
$res = mysql_query("SELECT .....");
if (mysql_num_rows($res) == 0) return; // take neprijatelne
session_start();
$_SESSION["name"] = addslashes(htmlspecialchars($_POST["name"]));
$_SESSION["passwd"] = htmlspecialchars(md5($_POST["passwd"]));
$_SESSION["time"] = time() - 900; // nastavim casovou znacku o 15min. dozadu
header("location:// na zabezpecenou stranku");
?>
soubor validation.php
Kód:
<?php
session_start();
$res = mysql_query("SELECT ....... name = $_SESSION["name"] && passwd = $_SESSION["passwd"]");
if (mysql_num_rows($res) == 0) return; // posles ho zas do kytek nejlepe na prihlaseni :-)
if ($_SESSION["time"] > time()) return; // uz tu dlouho nic neudelal
$_SESSION["time"] = time() - 900;
?>
ostatni soubory do kterych nechces aby ti nekdo vstoupil bez autentizace
Kód:
<?php
require_once("validation.php");
?>
<!-- no a tady je uz ten tvuj bezpecnej zbytek //-->
Psal jsem to z hlavy a rovnou sem takze pokud to pouzijes tak to bude chtit doladit.
Re: session_start() az po loginu
Hm, to je dobry, ale ma to malou vadu, kdyz na kazde strance budu resit DB tak to radsi tam uz necham tu session, protoze si v rychlosti vubec nepomuzu, ba naopak - toto me uz napadlo taky ;)
Uz jsem to vyresil - prachobycejne jsem rozdelil stranky pro public a user sekci a kdyz $page patri do soukrome sekce tak se nastartuje session.