Mechanizm sesji admin/user

2010-10-27 12:27:43 Post #1 user76

 
Z formularza dane wędrują do skryptu. Skrypt rozpoznaje, czy to user, czy admin.

Baza

CREATE TABLE `logowanie` (
  `id` int(11) NOT NULL auto_increment,
  `id_osoba` varchar(11) NOT NULL default '',
  `login` varchar(15) NOT NULL default '',
  `haslo` varchar(32) NOT NULL default '',
  PRIMARY KEY  (`id`)
) TYPE=MyISAM AUTO_INCREMENT=16 ;


logowanie.php
<?php include ("baza/sesje_logowanie.php"); ?>  

	<form action="log_skrypt.php" method="post"> 
	<br /><br />Login:<br />
	<input name="Login" type="text"/> 
	<br /><br />Hasło:<br />
 	<input name="Haslo" type="password" size="18" />
	<br /><br />
	<input type="submit" name="wyslij" value="Zaloguj" class="button" />


baza/sesje_logowanie.php
<?php
session_start();
session_register("czy_zal");
session_register("id_zal");
if ($_SESSION['czy_zal'] == 1 AND $_SESSION['id_zal'] != 0) {       
header("Location: index_uzyt.php");
} 
if ($_SESSION['czy_zal'] == 1 AND $_SESSION['id_zal'] == 'adm') {       
header("Location: index.php");
}
?>


log_skrypt.php
<?php
session_start();                         // start sesji
session_register("czy_zal");             // rejestracja zmiennej globalnej
session_register("id_zal");              // rejestracja zmiennej globalnej

$haslo = addslashes(trim(md5($_POST['Haslo'])));  // dane wysłane z md5($_POST) 
$login = addslashes(trim($_POST['Login']));       // z md5($haslo) 
//pierwszy sposób autoryzacji administratora
$admin_login = "administrator"; // login admina
$admin_haslo = "administrator";  // haslo admina
include ("baza/baza.php");  // wczytanie danych bazy mysql

if($login != $admin_login){     // jeśli niezgodne, czyli to user  
$zapytanie = "SELECT logowanie.login, logowanie.haslo, logowanie.id_osoba FROM 
logowanie WHERE login='$login' ";
$wynik = mysql_query($zapytanie);
if(mysql_num_rows($wynik) > 0) {
while($r = mysql_fetch_array($wynik)) {  // porównanie
          $haslo_baza = $r['haslo']; // dane wysłane z md5($_POST) z md5($haslo) 
          $login_baza = $r['login'];
          $osoba = $r['id_osoba'];
          $_SESSION['id_zal'] = $r['id_osoba']; // nadanie wartości zmiennej ses.
}}}
else{                          // w przypadku powodzenia, czyli to admin
$zapytanie = "SELECT administrator.login, administrator.haslo, administrator.id 
FROM administrator WHERE login='$admin_login' "; // 
$wynik = mysql_query($zapytanie);
if(mysql_num_rows($wynik) > 0) {
  while($r = mysql_fetch_array($wynik)) {
          $haslo_adm = $r['haslo'];
          $login_adm = $r['login'];
          $id_adm = $r['id'];
          $_SESSION['id_zal'] = "adm";
        }}}
        // przekierowania
if ($login == $login_adm and $haslo == $haslo_adm){
$_SESSION['id_zal'] = 'adm'; 
$_SESSION['czy_zal'] = 1;
header("Location: index.php?czy_zal={$_SESSION['czy_zal']}&id_zal=
{$_SESSION['id_zal']}");
}
else{
if ($login != $login_baza)
{
header("Location: komunikat3.php"); // login zły
}
else
{
if ($haslo != $haslo_baza)
{
header("Location: komunikat4.php"); // hasło złe
}
else{  
$_SESSION['czy_zal'] = 1;
header("Location: index_uzyt.php?czy_zal={$_SESSION['czy_zal']}&id_zal=
{$_SESSION['id_zal']}&id={$osoba}");
}
}
}
?>


index.php
<?php include ("baza/sesja_admin.php"); ?> 
...


sesja_admin.php
<?php
session_start();
session_register("czy_zal");
session_register("id_zal");

$id = $_SESSION['id_zal']; 

if ($_SESSION['czy_zal'] == 1 and $_SESSION['id_zal'] != 'adm' ) {       
header("Location: index_uzyt.php?czy_zal={$_SESSION['czy_zal']}&id_zal={$_SESSION['id_zal']}&id={$_SESSION['id_zal']}"); 
} 
if ($_SESSION['czy_zal'] == 0 and $_SESSION['id_zal'] == 0) {
header("Location: logowanie.php");
}
?>


index_uzyt.php
<?php include ("baza/sesja_uzyt.php"); ?> 
...


sesja_uzyt.php
<?php
session_start();
session_register("czy_zal"); 
session_register("id_zal");
session_register("osoba");
$id = $_SESSION['id_zal']; 
$id_osoba = $_SESSION['id_zal']; 
$id_uzyt = $_SESSION['id_zal']; 

if ($_SESSION['czy_zal'] == 1 and $_SESSION['id_zal'] == 'adm' ) {       
header("Location: index.php?czy_zal={$_SESSION['czy_zal']}&id_zal={$_SESSION['id_zal']}"); 
} 
if ($_SESSION['czy_zal'] == 0 and $_SESSION['id_zal'] == 0) {
header("Location: logowanie.php");
}
?>

2010-10-27 12:34:22 Post #2 nospor

 
1) Czemu masz ID i ID_OSOBA? Czemu ID_OSOBA to varchar?

2) session_register() jest już przestarzałe i nie zaleca się jego używania

3) header("Location: komunikat3.php");
Robienie każdego oddzielnego komunikatu w oddzielnym skrypcie nie jest zbyt trafionym pomysłem.

2010-10-27 12:37:09 Post #3 user76

 
id_osoba używam tam, gdzie id powtarza się w GET.

2010-10-27 12:38:02 Post #4 nospor

 
Jak to "powtarza w get"? Co przez to rozumiesz?
Czemu jako ID_OSOBA nie może służyć po prostu ID?

2010-10-27 12:41:18 Post #5 user76

 
$id_osoba użyłem w sesji, aby napełnić ją id osoby. Ponieważ id zwykle przekazują w odnośniku przez GET, to zapasowa wersja z sesji.

Masz rację, to powtórzenie.

2010-10-27 13:28:49 Post #6 user76

 
dodam jeszcze niszczenie tej sesji

<?php
session_start();
session_register("czy_zal");
session_register("id_zal"); 

if ($_SESSION['czy_zal'] = 1) {
$_SESSION['czy_zal'] = 0;
$_SESSION['id_zal'] = 0; 
} 
    session_destroy();
header("Location: logowanie.php");
?>

2010-11-26 09:21:53 Post #7 user76

 
Mam nowe pytanie, chciałbym wykonać liczniki do newsów, artów. Pomyślałem, żeby zapisać w bazie id sesji składającej się z czasu w minutach od epoki unixowej i adresu ip. Przy okazji wykonam sesje w logowaniu sprawdzając czas i jeśli jest większy od godziny, to jakaś akcja itd. Ma to być do głosów, czytań. Czy jeśli tylko sprawdzę, czy wpis istnieje i przypiszę warunek if, to wystarczy? Czy wystarczy po następnym zalogowaniu nadpisywać rekord z tabeli powiązanej na sesje, która pamięta, czy gość głosował, oceniał, czytał?

2010-11-26 09:46:12 Post #8 nospor

 
Przecież id sesji zmienia się użytkownikowi. Nie zapisuj w bazie sesji a zapisuj IP z jakiego głosowano oraz ewentualnie czas jeśli czas ma dla Ciebie jakieś znaczenie. Potem jak ktoś będzie chciał zagłosować to będziesz sprawdzał czy z danego IP już głosowano i pozwolisz albo nie.

2010-12-24 16:11:17 Post #9 gość_Cypek

 
Witam, powiedzcie mi czy ten skrypt logowania jest w miarę dobry, bo spodobał mi się nawet, ale jestem jeszcze początkujący i nie wiem jak jest z nim od strony bezpieczeństwa. Jeżeli coś trzeba poprawić aby był dobry to też bardzo proszę żeby ktoś mi napisał co Z góry dzięki serdecznie.

2010-12-24 16:15:08 Post #10 Comandeer

 
W miarę dobry to on jest. Jak potrzebujesz na gwałt, to proszę bardzo - możesz se użyć. Tylko zamiast md5 do kodowania danych w bazie radzę użyć czegoś z rodziny SHA

Odpowiedz

Ostatnio na forum

  1. PHP Developer - Gdań... moze kobieta
  2. PHP Developer - Gdań... Tomek ARforce
  3. Hackathon Distribute... aleksandra_c
  4. Klasa obsługi szablo... freeboc
  5. PHP [Symfony] Develo... NewPerspective
  6. [Wrocław][PHP Develo... Software house Amsterdam Standard sp. z o.o.
  7. Senior PHP Developer... Kingit

Skrypty użytkowników

  1. Klasa obsługi szablo... Lirdoner
  2. Sekcje user76
  3. Klasa walidująca for... user76
  4. Licznik Gości online korey
  5. Form Builder Comandeer
  6. Dynamiczny licznik z... korey
  7. Captcha Comandeer