Autor Zpráva
Ben
Profil *
Ahoj,
potřebuji dotáhnout do konce přihlašování a odhlašování na web pomocí session. V session mi stačí uchovávat pouze nick. Chci při přihlášení/odhlášení zůstat na té samé stránce a stímto si moc nevím rady.
Prosím o váš názor.

<?php
 error_reporting(e_all);
 include "config.php"; //pripojeni k databazi
 if (isset($_POST["auth_login"])) {
     if (mysql_result(
         mysql_query(
            "SELECT COUNT(*) FROM uzivatele 
            WHERE prezdivka = '" . mysql_real_escape_string($_POST["auth_login"]) . "' 
            AND heslo = '" . mysql_real_escape_string($_POST["auth_heslo"]) . "'"), 0)) {
              session_start();
              session_register("logged");
              session_register("auth_login"); 
              session_regenerate_id(); // ochrana před Session Fixation
              $_SESSION["logged"] = true;
              $_SESSION["auth_login"] = $_POST["auth_login"]; //nick uživatele
             }

 }
 
 if($_GET["logout"] == "1"){
   session_unset();
 }
 else{ 
   session_start();
 }
// tady je stránka(html hlavičky a generovaný obsah)   
?>

//tady je část stránky, která mi ukazuje jestli je uživatel přihlášen nebo ne
<h3>Přihlášení</h3>
<?php  


 if (isset($_SESSION["logged"])) { 
   echo "Jste přihlášen jako: {$_SESSION["auth_login"]}\n";
   echo "<a href=\"http://".$_SERVER["SERVER_NAME"].$_SERVER["SCRIPT_NAME"]."?logout=1\">Odhlásit</a>";
 }

 if (!isset($_SESSION["logged"])) {
   if (isset($_POST["auth_login"])) {
     echo "<p>Neplatné přihlašovací údaje.</p>\n";
   }
   if($_GET["logout"] == "1"){
     echo"Byl jste odhlášen.";
   }  
   
 echo "<form action='' method='post'>\n";
 echo "Login: <input name='auth_login' maxlength='30' value='{$_POST["auth_login"]}'/>\n";
 echo "Heslo: <input type='password' name='auth_heslo' />\n";
 echo "<input type='submit' value='Přihlásit' />\n";
 echo "</form>\n";
}

//tady je pak ukončení stránky
?>
 


Taps
Profil
Ben:
podívej se na http://pecan.cz/index.php?id=38&n=registrace-prihlaseni-uzivatelu Určitě ti to pomůže
Taps
Profil
Ben:
<?php
session_start();
 error_reporting(e_all);
 include "config.php"; //pripojeni k databazi
 if (isset($_POST["auth_login"])) {
     if (mysql_result(
         mysql_query(
            "SELECT COUNT(*) FROM uzivatele 
            WHERE prezdivka = '" . mysql_real_escape_string($_POST["auth_login"]) . "' 
            AND heslo = '" . mysql_real_escape_string($_POST["auth_heslo"]) . "'"), 0)) {
              session_start();
              session_register("logged");
              session_register("auth_login"); 
              session_regenerate_id(); // ochrana před Session Fixation
              $_SESSION["logged"] = true;
              $_SESSION["auth_login"] = $_POST["auth_login"]; //nick uživatele
             }

 }
 
 if($_GET["logout"] == "1"){
session_destroy();
 }

// tady je stránka(html hlavičky a generovaný obsah)   
?>


<?php  


 if (isset($_SESSION["logged"])) { 
   echo "Jste přihlášen jako: {$_SESSION["auth_login"]}\n";
   echo "<a href=\"http://".$_SERVER["SERVER_NAME"].$_SERVER["SCRIPT_NAME"]."?logout=1\">Odhlásit</a>";
 }

 if (!isset($_SESSION["logged"])) {
   if (isset($_POST["auth_login"])) {
     echo "<p>Neplatné přihlašovací údaje.</p>\n";
   }
   if($_GET["logout"] == "1"){
     echo"Byl jste odhlášen.";
   }  
   
 echo "<form action='' method='post'>\n";
 echo "Login: <input name='auth_login' maxlength='30' value='{$_POST["auth_login"]}'/>\n";
 echo "Heslo: <input type='password' name='auth_heslo' />\n";
 echo "<input type='submit' value='Přihlásit' />\n";
 echo "</form>\n";
}

//tady je pak ukončení stránky
?>
__construct
Profil
Ben:
- máš tam zbytočne 2x session_start(); - zavolaj ho na začiatku skriptu a po prihlásení len regeneruj session_id
- nepoužívaj session_register() - od verzie PHP 5.3 je deprecated (zastaralá)
ShiraNai7
Profil
Ukládej heslo jen jako otisk!
Viz funkce md5, sha1
Ben
Profil *
Taps
díky za nasměrování a upravení drobných chyb

__construct
díky za doladění a upozornění na starou funkci

ShiraNai7
o ukládání hashe vím, jen jsem se k tomu ještě nedostal, díky

Jinak po drobných úpravách mi to konečně jede, díky moc :-)

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