Stránka 1 z 1

[PHP] session jak na zabezpecenou admin. cast

Napsal: pon 3. dub 2006, 13:10
od SurfStar
Ahoj, nejsem zadny guru v PHP a uz se asi 2 dny trapim tim ze potrebuju udelat administracni cast pristupnou pro ty, kdo projde spravnym odeslanim hesla a uzivatelskeho jmena. Stale se mi to vsak nedari rozbehat. Takze bych byl velmi rad kdyby mi na to nekdo jukl a zkusil zjistit proc to nebeha :-((

Mam 3 soubory:
1) zk.php ..... formular pro odesilani hesla a loginu
2) loginxxx.php .... skript ktery kontroluje zda login a heslo je spravne s udaji v DB + prirazuje session
3) administrace.php (stranka na kterou ma byt odepren pristup neprihlasenym uzivatelům).


1) Mam Databazi (pro zjednoduseni uvadim celou strukturu tab)

Kód: Vybrat vše

CREATE TABLE `user` (
  `login` varchar(20) NOT NULL default '',
  `password` varchar(20) NOT NULL default ''
) ENGINE=MyISAM DEFAULT CHARSET=latin1;

-- 
-- Vypisuji data pro tabulku `user`
-- 
INSERT INTO `user` VALUES ('zk', 'zkk');
 
Takze jak vidite ... login je zk a password je zkk (ulozeno v DB).

Dale mam jednoduchý formular (zk.php) ve kterem zadavam login a password pro pristup na zabezpecenou stranku administrace.php Formular se odesila na skript loginxxx.php kde se kontroluje zda je vse OK a pokud ano melo by se vse presmerovat an administrace.php
formular ... zk.php

Kód: Vybrat vše

<form action="loginxxx.php" method="post">
login: <input type="text" name="login_name"><br>
passw" <input  type="password" name="login_password"><br>
<input type="submit" value="odeslat">
</form>
Dále soubor loginxxx.php ktery kontroluje zda udaje obsazene v formulari odpovidaji hodnotam v DB (prosim nekritizujte ze nemam MD5 --- jde vylozene o zkousku)
skript loginxxx.php

Kód: Vybrat vše

<?
session_start();
$login_name = $_REQUEST['login_name'];
$login_password = $_REQUEST['login_password'];
if ($login_name!="" && $login_password!=""):
  include "header.php"; //zde vse funguje
  if (!$spojeni):
    Header("Location: ./zk.php?chyba=".URLEncode("Nepodarilo se spojit s databází"));
  endif;
  $result = MySQL_Query("SELECT * FROM user WHERE login='$login_name'");
  if (MySQL_Num_Rows($result)!=0):
    $uzivatel = MySQL_Fetch_Array($result);
    if ($uzivatel["password"]!=$login_password):
      echo $uzivatel["password"];
    else:
      // heslo je správné
      //nastavení session promenných
      $_SESSION["username"] = $login_name;
      //presmerování na administraci ktera je pristupna pouze pro spravne prihlasene
      Header("Location: ./administrace.php");
    endif;
  else:
    // zadaný uživatel není v databázi
    Header("Location: ./zk.php?chyba=".URLEncode("Zadaný uživatel neexistuje"));
  endif;
else:
  //nezadány oba prihlašovací údaje
  Header("Location: ./zk.php?chyba=".URLEncode("Musíte zadat všechny   parametry"));
endif;
?>
Posledni je stranka na kterou ma byt omezen pristup: Je to skript administrace.php

Kód: Vybrat vše

<?
session_start();         //ZAPNUTÍ SESSIONS
if (!$_SESSION["username"]) {
Header ("Location:zk.php");
exit;
}
?><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title>Untitled Document</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
</head>
<body>
Tady uz text zabezpeceneho mista


Může mi nekdo rici jestli k sessions pristupuju dobre ... popripade mi zde napsal presne jak by to mohlo fungovat? nedari se mi to vubec rozbehat.

Napsal: úte 4. dub 2006, 02:50
od Lamicz
Toto jsem ti narychlo nabouchal ;) Neresim pripojeni do DB.

Kód: Vybrat vše

<? 
session_start();  
    
  if($_GET['action'] == login){   
           
    $count_rows = mysql_num_rows($res = mysql_query( "SELECT `Id` FROM `tabulka` WHERE (`Login`='".$_POST['login']."') AND (`Password`='".$_POST['password']."')" ));
    
    if($count_rows == 1){ 
      $_SESSION['login'] = $_POST['login'];
    }
    header("Location: index.php");
  }

  if($_GET['action'] == logout){
    
    unset($_SESSION['login']);
    header("Location: index.php");
  }

if(!isset($_SESSION['login'])){

  echo "<FORM METHOD=\"POST\" ACTION=\"index.php?action=login\">\n";
  echo "<table>\n";
  echo "<tr>\n";
  echo "<td>Login:</td>\n";
  echo "<td><INPUT CLASS=\"short\" TYPE=\"TEXT\" NAME=\"login\"></td>\n";
  echo "</tr>\n";
  echo "<tr>\n";
  echo "<td>Heslo:</td>\n";
  echo "<td><INPUT CLASS=\"short\" TYPE=\"password\" NAME=\"password\"></td>\n";
  echo "</tr>\n";
  echo "<tr>\n";
  echo "<td><INPUT TYPE=\"SUBMIT\" VALUE=\"Login\"></td>\n";
  echo "</tr>\n";
  echo "</table>\n";
  echo "</FORM>\n";

}else{

  echo "Vitej, ".$_SESSION['login']."!"; 

  echo "<a href=\"index.php?action=logout\">Logout</a>";
  
  echo " ... privatni sekce... ";

}
?>