Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Sesja w systemie logowania
Forum PHP.pl > Forum > PHP
nightmoon
Witam, mam problem, mianowicie mam system z logowaniem itd. ale chciał bym w nim wprowadzić sesję, która sprawdzała by zgodność hasła z daną rangą np. mod=111 admin=222 sysop=333
Aktualnie zrobiłem coś takiego...

Główny plik, z którego pobierane są wszystkie funkcje...

Kod
function maxsysop () {
  
   // Sprawdz czy istnieja sesje jezeli tak to przejdz dalej
   if(isset($_SESSION['code'])) {
      require "include/piny.php";

     // Sprawdz czy haslo dla danej rangi jest poprawne jezeli tak wyswietl strone
      if($_SESSION['code'] == $sysop_code && $user['class'] == UC_SYSOP ||
         $_SESSION['code'] == $semi_sysop_code && $user['class'] == UC_SEMI_SYSOP ||
         $_SESSION['code'] == $administrator_code && $user['class'] == UC_ADMINISTRATOR ||
         $_SESSION['code'] == $moderator_code  && $user['class'] == UC_MODERATOR)
         header('Location: panel.php');
      else
         header('Location: sprpin.php');
   }
   else {
      header('Location: sprpin.php');
   }
  
   }


Plik sprpin.php

Kod
<?php
require "include/bittorrent.php";
dbconn();
loggedinorreturn();
noaccess("spr.php", UC_VIP);
if (get_user_class() < UC_MODERATOR)
     stderr('Błąd', 'brak dostępu!');

stdhead("Sprawdzanie PINu");

$res = mysql_query("SELECT username FROM users WHERE id=" . $CURUSER['id'] . "") or sqlerr(__FILE__, __LINE__);
$user = mysql_fetch_assoc($res);

print("<table border=1 cellspacing=0 cellpadding=5>");
       print("<tr>");
             print("<td class='colhead'>");
             print("<p align='center'>Wpisz swój PIN <a href='userdetails.php?id=" . $CURUSER['id'] . "'>" . $user['username'] . "</a></p>");
             print("</td>");
       print("</tr>");

       print("<tr>");
             print("<td>");
             print("<form action='sprpin.php' method='post'>");
             print("<p align='center'><input name='code' type='text' size='5'></p>");
             print("<p align='center'><input name='start' type='submit' value='Zatwierdź wprowadzony kod'></p>");
             print("</form>");
             print("</td>");
       print("</tr>");
print("</table>");

stdfoot();

if($_POST["start"]) {

    session_start();

    $_SESSION['code'] = $_POST['code'];

    header('Location: panel.php');

}
?>


No i include/piny.php dla czystej formalności, z przykładowymi hasłami...

Kod
<?
  
   $sysop_code = '444';
   $semi_sysop_code = '333';
   $administrator_code = '222';
   $moderator_code = '111';
  
   ?>


Widzicie gdzieś na starcie błąd? Grzebie się z tym już jakiś czas i nie działa tam gdzie jest funkcja maxsysop(); w pliku wywołany to zawsze się wyświetla plik nawet jak sesja nie istnieje :/
lukaszgolder
Sprawdź czy na pewno podczas wywoływania tej funkcji $_SESSION['code'] wyświetla jakąś wartość (jeśli podany), a następnie zamiast
  1. <?php
  2.  isset($_SESSION['code'])
  3. ?>

ustaw
  1. <?php
  2. $_SESSION['code'] != ''
  3. ?>
nightmoon
Inaczej strasznie to uprościłem, ponieważ blokowany ma być dostęp tylko i wyłącznie do 1 pliku administracyjnego, tego głównego...
Więc stworzyłem funkcję

Kod
function sesja() {
// Sprawdz czy istnieja sesje jezeli tak to przejdz dalej
if(isset($_SESSION['code'])) {
    require "piny.php";

    // Sprawdz czy haslo dla danej rangi jest poprawne jezeli tak wyswietl strone
    if($_SESSION['code'] == $sysop_code && $user['class'] == UC_SYSOP ||
       $_SESSION['code'] == $semi_sysop_code && $user['class'] == UC_SEMI_SYSOP ||
       $_SESSION['code'] == $administrator_code && $user['class'] == UC_ADMINISTRATOR ||
       $_SESSION['code'] == $moderator_code  && $user['class'] == UC_MODERATOR)
        header('Location: panel.php');
    else
       header('Location: sprpin.php');

}
else {
    header('Location: sprpin.php');

}
}


I w tym panel.php po prostu się do niej odwołałem tylko niestety przy pomocy tego skryptu

Kod
<?php
require "include/bittorrent.php";
dbconn();
loggedinorreturn();
if (get_user_class() < UC_MODERATOR)
     stderr('Błąd', 'brak dostępu!');

stdhead("Sprawdzanie PINu");

$res = mysql_query("SELECT username FROM users WHERE id=" . $CURUSER['id'] . "") or sqlerr(__FILE__, __LINE__);
$user = mysql_fetch_assoc($res);

print("<table border=1 cellspacing=0 cellpadding=5>");
       print("<tr>");
             print("<td class='colhead'>");
             print("<p align='center'>Wpisz swój PIN <a href='userdetails.php?id=" . $CURUSER['id'] . "'>" . $user['username'] . "</a></p>");
             print("</td>");
       print("</tr>");

       print("<tr>");
             print("<td>");
             print("<form action='sprpin.php' method='post'>");
             print("<p align='center'><input name='code' type='text' size='5'></p>");
             print("<p align='center'><input name='start' type='submit' value='Zatwierdź wprowadzony kod'></p>");
             print("</form>");
             print("</td>");
       print("</tr>");
print("</table>");

if($_POST["code"] == '') {
print("Źle...");
}
else {
print("Hasło:".$pinver."");
}
stdfoot();

if($_POST["start"]) {

    session_start();

   $_POST['code'] = $_SESSION['code'];
   $pinver = $_SESSION['code'];


}

?>

Za żadne skarby nie mogę wywołać $pinver samo $_POST['code'] pokażę poprawnie zwróci jego wartość jeśli

To
Kod
print("Hasło:".$pinver."");

Zmienimy na to:
Kod
print("Hasło:"$_POST['code']"");


Temat można zamknąć sprawę rozwiązałem w zupełnie inny sposób zamiast sesji natomiast w tym przypadku rozpisanym wyżej nie przechwytuje zmiennych sesji winksmiley.jpg
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.