Autor Zpráva
wikinka
Profil
Ahojte,
chcela by som poprosit o pomoc, nefunguje mi session pri login. Presmerovanie na jednotlive podstranky je OK, ale nejde ochrana, pokial uzivatel nie je prihlaseny, nemoze vstupit na "success page" Este len zacinam s PHP, takze sa vopred ospravedlnujem, ak tam mam nejake brutalne chyby. Vopred vsetkym velmi pekne dakujem za ochotu:-))

Login kontrola

if ($_POST['submit']) {
$priezvisko = $_POST['priezvisko']; 
$heslo = $_POST['heslo']; 



$priezvisko = stripslashes($priezvisko);
$heslo = stripslashes($heslo);
$priezvisko = mysql_real_escape_string($priezvisko);
$heslo = mysql_real_escape_string($heslo);

$link=mysql_connect("localhost", "root","");
  $db=mysql_select_db("doctori", $link);
  
$result=mysql_query("select * from $tbl where priezvisko='$priezvisko' and heslo='$heslo' limit 1;");
$result1=mysql_query("select * from $tbl1 where priezvisko='$priezvisko' and heslo='$heslo' limit 1;");
$result2=mysql_query("select * from $tbl2 where priezvisko='$priezvisko' and heslo='$heslo' limit 1;");

if(mysql_num_rows($result) == 1) {
$row = mysql_fetch_assoc($result);     
session_register('priezvisko');   
header("location: " . $row['firma'] . ".php");
} 
 
      else if (mysql_num_rows($result1) == 1) {
      $row = mysql_fetch_assoc($result1);   
      session_register('priezvisko');    
      header("location: " . $row['firma'] . ".php");
      } 
        else if (mysql_num_rows($result2) == 1) {
        $row = mysql_fetch_assoc($result2);   
        session_register('priezvisko');     
        header("location: " . $row['firma'] . ".php");
        } 
      else {      
       
      header("location:login.php");}
        

}

else {      
       
    header("location:login.php");}
    
?>


success page
<?php
 session_start();
if(!session_is_registered('priezvisko')){
header("location:login.php");}
?>

Moderátor Alphard: Vkládej prosím kódy mezi značky [pre] a [/pre] (stačí kliknout na ).
Tori
Profil
session_register funguje jen když je povolené nastavení register_globals. (Pokud nevíte, zjistíte to třeba takto:
$set = ini_get('register_globals');
echo 'register_globals je '.($set ? 'zapnute' : 'vypnute');
Obecně se tyto funkce (session_register a spol.) nedoporučují používat, spíš bych radila přepsat těch pár řádků a používat jen pole $_SESSION. Je pak i menší riziko, že si omylem přepíšete nějakou proměnnou v session. A jestli se do toho pustíte, tak nezapomeňte do každého skriptu přidat session_start().

PS: Když ten blok kódu označíte jako kód (tlačítko [< >] ) , bude přehlednější.
wikinka
Profil
dakujem Vam Tori, pomohla by ste mi s tym prepisom na $_SESSION, skusala som uz aj tuto alternativu, ale ani toto nefungovalo. Bojujem s tym uz cely den a nic :-(
wikinka
Profil
Tori:
skusila som to prepisat za $_SESSION, ale niekde robim chybu....


v Login kontrola

if(mysql_num_rows($result) == 1) {
$row = mysql_fetch_assoc($result);     
$_SESSION['prihlaseny'] = $priezvisko;  
header("location: " . $row['firma'] . ".php");
}

v success page
<?php
 session_start();
if($_SESSION['prihlaseny'] == ""){
header("location:index.php");}
?>

Moderátor Alphard: Vkládej prosím kódy mezi značky [pre] a [/pre] (stačí kliknout na ).
Tori
Profil
wikinka:
skusala som uz aj tuto alternativu, ale ani toto nefungovalo
A samotné ověření uživatele funguje? Přesměruje se na tu $row[firma].php (=chyba je v použití session), nebo ne (=chyba je v ověřování uživatelů)?
wikinka
Profil
Tori
v overovani uzivatelov by nemala byt chyba, skusala som to bez pouzitia session a fungovalo mi pekne presmerovanie na rozne podstranky, ktorych nazov som si oznacila do pola 'firma' v databaze. Rovnako som potom oyznacila aj success page ako 'firma'.php. Toto fici. Len ked som skusala hore do stavoveho riadku napisat 'firma'.php, tak ma v pohode pustilo na tuto stranku bez loginu :-(
wikinka
Profil
Tori:
A este testovala som aj zadat spatne meno alebo heslo, vtedy som zostala pekne na stranke loginu.
Tori
Profil
[#4] wikinka:
Tak jak jste to přepsala to vypadá v pořádku. Nechybí session_start() na začátku login.php? Anebo by ještě mohlo být v $_SESSION[prihlasen] uložené něco z předchozích pokusů, pokud jste od té doby nezavřela prohlížeč. Nic lepšího mě teď nenapadá, čím by to mohlo být.
wikinka
Profil
Tori:
ano funguje to, a doplnila som session_start() na zaciatku aj loginkontrola.php a aj login.php,. Dakujem. No vyzera to tak, akoby nenacitavalo do $_SeSSION meno uzivatela, takze, ked napisem hore doriadku 'firma'.php tak ma tam v pohode pusti. Akoby som tam session ani nemala. Fakt neviem, kde mam chybu. Nemoze byt, ze si pamata stare prihlasenia, ktore som testovala a preto ma tam pusti? Alebo bude chyba v serveri? Pouzivam Wamp server 2.1e 32bit. Fakt neviem :-((
Michel
Profil
wikinka:
Když si nejsem jistý, zda session běží, tak si jí zkusím vypsat a nebo použít následující:
<?php
session_start();
if (!session_id()) {$sid = 'NEMA!';} else {$sid = session_id();}
echo 'Toto session ma id: '.$sid;
?>


Pokud to id nevypíše, tak bude potřeba se podívat do nastavení serveru, (nejčastěji bývá problém, že není nastavena cesta). Pokud ho vypíše, tak bude chyba někde v kódu.
peta
Profil
Jestli mas podezreni, ze se prenasi stare session, je mozne si ho vypsat a pripadne zrusit.
echo '<pre>'; print_r($_SESSION); echo '</pre>';
session_unset();
echo '<pre>'; print_r($_SESSION); echo '</pre>';

Aby se session prenaselo mezi strankami, tak na kazde z nich musi byt session_start(); jako prvni radek. Nad tim nezmi byt zadny html kod. (Ono to pak muze a nemusi fungovat)
--- soubor.php ---

<?php

session_start();

---
Nad <?php je prazdny radek, to je spatne, protoze se hlavicka odesle a session je soucasti informaci hlavicky.
Za <?php je prazdny radek, to ale nevadi, to je php kod.
Podobnou chybu odhali povoleni zobrazovani chyb
<?php
@ini_set('error_reporting', E_ALL);
@ini_set("display_errors", "on");
error_reporting(E_ALL);
?>


Dalsi problem muze nastat, ze se session neprenaseji vubec. Nekde, mozna prohlizec, mozna server, ma zakazane cookies. A moznosti je vic.

Udelal bych si jednoduchy priklad.
--- soubor1.php ---
<?php
session_start();
$jmeno = isset($_GET['jmeno']) ? $_GET['jmeno'] : '';
if ($jmeno=='lojza')
  {
  $_SESSION['jmeno'] = $jmeno;
  header("location:soubor2.php");
  }
else
  {
  session_unset();
  }
?>
<a href="soubor1.php?jmeno=lojza">Prihlas Lojzu</a>

--- soubor2.php ---
<?php
session_start();
print_r($_SESSION);
?>


Kdyz kliknu v soubor1.php na odkaz Prihlas Lojzu, tak me presmeruje na soubor2 a vypise, ze je v session ulozeny lojza.
Array ( [jmeno] => lojza ) 

Co to udela tobe?

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