Problém s přihlášením $_SESSION – PHP – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Problém s přihlášením $_SESSION – PHP – Fórum – Programujte.comProblém s přihlášením $_SESSION – PHP – Fórum – Programujte.com

 

Q
~ Anonymní uživatel
219 příspěvků
19. 6. 2014   #1
-
0
-

Ahoj,

mám přihlašovací skript, kde jsem si udělal Session a přihlásil jsem se na další stránku po té co jsem udělal soubor s session.php se nemohu přihlásit, chtěl jsem to proto abych se bez přihlášení nemohl dostat na soubor kde je nutné přihlášení.
Session.php

<?php Session_start(); /* DŮLEŽITÉ NASTARTOVAT SESSION */

<?php
 Session_start();  /* DŮLEŽITÉ NASTARTOVAT SESSION */
 if(isset($logovani["login"])){
 $logovani ["id"];
 $logovani ["jmeno"];
 $logovani ["prijmeni"];
 $logovani ["login"];


 }
 else{
 header("location:prihlaseni.php");
 }

 ?>

z login skriptu založená session

Session_start();
    $_SESSION["id"] = $logovani["id"];
    $_SESSION["jmeno"] = $logovani ["jmeno"];
    $_SESSION["prijmeni"] = $logovani ["prijmeni"];
    $_SESSION["login"] = $logovani ["login"];
    header("location:ucet.php;")
    }

Díky za odpovědi.

Nahlásit jako SPAM
IP: 85.207.106.–
peter
~ Anonymní uživatel
4016 příspěvků
20. 6. 2014   #2
-
0
-

To mas nejake divne. Zkus dat cely testovany kod. Tady overujes jenom isset($logovani["login"])), nic podobne se session tam nemas. Mimochodem, udelat nezabezpeceny dulezity kod je to nejhorsi, co vubec muzes udelat, ale nechci ti radit :)

Nahlásit jako SPAM
IP: 2001:718:2601:258:847:bdd...–
Q
~ Anonymní uživatel
219 příspěvků
20. 6. 2014   #3
-
0
-

   

<?php
require("spojeni/connect.php");
if($_POST){
if(empty($_POST["login"]) and (empty($_POST["heslo"]))){
echo ("<span class='prihlaseni'>Vyplniňte prosím všechny pole přihlášení.</span>");
}
else{
if(isset($_POST["login"]) and (isset($_POST["heslo"]))){
$login = $_POST["login"];
$heslo = $_POST["heslo"];
$dotaz = "SELECT * FROM studenti where login='$login' and heslo='$heslo'";
echo $dotaz;
$vysledek=mysql_query($dotaz) or die ("Nelze se přihlásit");
$logovani = mysql_fetch_array($vysledek);
if(mysql_num_rows($vysledek)==1){
   Session_start();
   $_SESSION["id"] = $logovani["id"];
   $_SESSION["jmeno"] = $logovani ["jmeno"];
   $_SESSION["prijmeni"] = $logovani ["prijmeni"];
   $_SESSION["email"] = $logovani ["email"];
   $_SESSION["jazyk"] = $logovani ["jazyk"];
   $_SESSION["login"] = $logovani ["login"];
   $_SESSION["heslo"] = $logovani ["heslo"];

   
   
   switch($logovani["jazyk"]){
      case "Anglický Jazyk":header("location:studentanj.php");
      break;
      case "Francouzský Jazyk":header("location:studentfra.php");
      break;
      case "Německý jazyk":header("location:studentnem.php");
      break;
      }
   
   
}
}
}
}
?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
  <meta http-equiv="content-type" content="text/html; charset=UTF-8">
  <meta name="generator" content="PSPad editor, www.pspad.com">
  <style>
          .prihlaseni{
          height:100px;
          background:red;
          border:1px solid red;
          color:white;
          width:150px;
          padding:5px;
          }
       
          input[type="submit"]{
          height:25px;
          width:156px;
          color:white;
          background:#67b0cc;
          }
  </style>
  <title></title>
  </head>
  <body>
       <h1>Přihlášení</h1>
       
        <form action="prihlaseni.php" method="POST">
        <input type="text" name="login" placeholder="Přihlašovací jméno">     <br>
        <input type="password" name="heslo" placeholder="Heslo">     <br>
        <input type="submit" value="Přihlásit se">
        </form>
       
       
  </body>
</html>
Nahlásit jako SPAM
IP: 85.207.106.–
peter
~ Anonymní uživatel
4016 příspěvků
20. 6. 2014   #4
-
0
-

"SELECT * FROM studenti where login='$login' and heslo='$heslo'" -- nepouzivej *, bezpecnostni hrozba
"SELECT id, jmeno, prijmeni, email, jazyk, login, heslo FROM studenti where login='$login' and heslo='$heslo'"

$_SESSION["id"] = $logovani["id"]; $_SESSION["jmeno"] = $logovani ["jmeno"]; $_SESSION["prijmeni"] = $logovani ["prijmeni"]; $_SESSION["email"] = $logovani ["email"]; $_SESSION["jazyk"] = $logovani ["jazyk"]; $_SESSION["login"] = $logovani ["login"]; $_SESSION["heslo"] = $logovani ["heslo"];
To se ti pak zkrati na $_SESSION = $logovani;


echo $dotaz; ...
Session_start(); - pri zapnuti error_reporting() na E_ALL ti tady zahlasi error, protoze echo odesle hlavicku a tudiz uz nelze vytvorit nove cookies/session, tudiz tento prikaz se nepouzije, ledaze bys mel ob_start nahore, coz nevidim

Sorry, ostatni nejspis okomentuje nekdo jiny, ja ted specham...

Nahlásit jako SPAM
IP: 2001:718:2601:258:847:bdd...–
Kit+15
Guru
20. 6. 2014   #5
-
0
-

#4 peter
Bezpečnostní hrozba z toho dotazu nezmizela. Ten tvůj SQL dotaz je stále stejně nebezpečný.

Nahlásit jako SPAM
IP: 147.229.242.–
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
Q
~ Anonymní uživatel
219 příspěvků
20. 6. 2014   #6
-
0
-

#4 peter
Z tvýho komentáře absolutně nechápu nic.

Nahlásit jako SPAM
IP: 85.207.106.–
22. 6. 2014   #7
-
0
-

#1 Q
Nechtěl jsi místo if(isset($logovani["login"])){ kontrolovat $_SESSION proměnnou?

peter: co je nebezpečného na použití SELECT * ? :) Je to pomalejší, to je pravda. Ale že by to bylo nebezpečné, to slyším poprvé.

V pořádku ten dotaz ale samozřejmě není, nemůžeš tam jen tak fláknout data, která jdou od uživatele bez nějaké kontroly. Pro tebe bude momentálně nejjednodušší ty proměnné prohnat funkcí mysql_real_escape_string (takže např. $login = mysql_real_escape_string($_POST["login"]);)

Nahlásit jako SPAM
IP: 2a00:1028:83ac:345a:ac3e:...–
peter
~ Anonymní uživatel
4016 příspěvků
23. 6. 2014   #8
-
0
-

Jan Dlouhý - SELECT * vytahne vsechny sloupce. Pokud jsi hacker a potrebujes se neco dozvedet o db, tak neni nic lepsiho nez dotaz, ktery muzes zmenit (login='$login') a ma SELECT *.

Kit - Obsah promennych jsem neresil, to je taky treba, to jo, viz Jan Dlouhý

Q - Aha.
1. Najdi si priklad na error-reporting, zjisti, jak se pouziva a pridej si ho tam na zacatek programu s hodnotou E_ALL
2. pridaj si tam mysql_real_escape_string (viz Jan Dlouhý), opet priklady viz manual
3. Kdyz napises do toho SELECTu misto * seznam sloupcu, pak ta muzes zrovna ulozit do $_SESSION = $logovani a nemusis sloupec po sloupci.
4. php funguje tak, ze kdyz udelas echo, tak to hned posila uzivateli, pokud nemas na zacatku ob_start nebo zmeneny soubor php.ini/httpd.ini/.htaccess. Cili, ty tam udelas echo, on vyrobi html text + hlavicku souboru a odesle prohlizeci. Pokud je hlavicka uz odeslana, tak dalsi echo ji nevytvari, ale pouzije tu samou. Pokud je hlavicka odeslana, pak se ignoruji obvykle vsechny dalsi prikazy pro zmenu hlavicky, jako treba session_start, header... Viz manual, tam je to napsano. Cili, pred session_start nesmis mit zadne echo. Ob_start zapricini to, ze se stranka odesle az na konci nebo pri ob_flush.
http://cz2.php.net/…eporting.php
http://cz2.php.net/…on-start.php
http://cz2.php.net/…ob-start.php

Nahlásit jako SPAM
IP: 2001:718:2601:258:7066:59...–
Kit+15
Guru
23. 6. 2014   #9
-
0
-

#1 Q
#8 peter
Hlavně už konečně zapomeňte na funkci mysql_query(). Je zastaralá a v další verzi PHP nebude.

Nahlásit jako SPAM
IP: 147.229.242.–
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
23. 6. 2014   #10
-
0
-

#8 peter
Když už by hacker narazil na takovýto dotaz, nějaký SELECT * by už mu moc nepomohl - získal by přístup k celé databázi.

Ale jak píše Kit, raději se vykašlat na mysql_query a používat něco rozumnějšího (PDO, Dibi...)

Nahlásit jako SPAM
IP: 2a00:1028:83ac:345a:ac3e:...–
Q
~ Anonymní uživatel
219 příspěvků
24. 6. 2014   #11
-
0
-

Než dělat v PDO, tak radči ovladač mysqli...

Nahlásit jako SPAM
IP: 85.207.106.–
Kit+15
Guru
24. 6. 2014   #12
-
0
-

#11 Q
V čem přesně je MySQLi lepší než PDO?

Nahlásit jako SPAM
IP: 147.229.242.–
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
24. 6. 2014   #13
-
0
-

#12 Kit
Vždyť je to jasné - do mysqli může valit stejné prasárny, jako do mysql_query :)

Nahlásit jako SPAM
IP: 2a00:1028:83ac:345a:b95b:...–
Kit+15
Guru
24. 6. 2014   #14
-
0
-

#13 Jan Dlouhý
Do PDO přece také :-) 

Nahlásit jako SPAM
IP: 185.21.163.–
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
24. 6. 2014   #15
-
0
-

#14 Kit
To je pravda :) Pokud chce člověk prasit, nezastaví ho nic.

Nahlásit jako SPAM
IP: 2a00:1028:83ac:345a:b95b:...–
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 28 hostů

Podobná vlákna

Problém s prihlásením — založil Jakub

Platnost $_SESSION — založil pawlik

Platnost a působnost $_SESSION — založil DragonBehemont

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý