Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Uprawnienia po zalogowaniu
bar_kow
post
Post #1





Grupa: Zarejestrowani
Postów: 18
Pomógł: 0
Dołączył: 25.09.2011

Ostrzeżenie: (0%)
-----


Witam, męczę się jakiś czas. Może Wy mi pomożecie.
Mam prosty system logowania. Chciałbym do niego dodać odpowiednie uprawnienia. W MySQL dodałem kolumnę uprawnienia, gdzie domyślna wartość to "zwykle".
Jak zrobić aby po zalogowaniu, oprócz nazwy użytkownika pobierał też uprawnienia?

Plik logowania:
  1.  
  2. $message="";
  3.  
  4. // Sekcja logowania
  5. $login=$_POST['login'];
  6. if($login) {
  7.  
  8. $uzytkownik=$_POST['uzytkownik'];
  9. $md5_haslo=md5($_POST['haslo']);
  10.  
  11.  
  12.  
  13. $host="localhost";
  14. $db_user="UZYTKOWNIK";
  15. $db_password="HASLO";
  16. $database="NAZWA";
  17. mysql_connect($host,$db_user,$db_password);
  18. mysql_select_db($database);
  19.  
  20. $rezultat=mysql_query("select * FROM logowanie WHERE uzytkownik='$uzytkownik' AND haslo='$md5_haslo'");
  21. if(@mysql_num_rows($rezultat)){
  22. session_register("uzytkownik");
  23.  
  24. header("location:main.php");
  25. }else {
  26. $message="<center><p algin='center'><div class='warning_box'>
  27. Nieprawid?owa nazwa u?ytkownika lub has?o!.
  28. </div></p></center>";
  29. }
  30. }
  31. ?>
  32.  
  33. STRONA


Plik strony (sesja):
  1. <?
  2.  
  3. if(!session_is_registered("uzytkownik")){
  4. header("location:index.php");
  5. }
  6. ?>
  7.  
  8. STRONA


Proszę o pomoc...

Edit:

Pobieranie nazwy użytkownika np.:
  1. Witaj, <? echo $_SESSION['uzytkownik']; ?>.


Myślałem o tym $_SESSION['uprawnienia'] ale nie działa...;

Ten post edytował bar_kow 27.11.2011, 18:28:23
Go to the top of the page
+Quote Post
2 Stron V   1 2 >  
Start new topic
Odpowiedzi (1 - 19)
szmerak
post
Post #2





Grupa: Zarejestrowani
Postów: 286
Pomógł: 12
Dołączył: 23.11.2006
Skąd: WL

Ostrzeżenie: (0%)
-----


Po pierwsze to zabezpiecz te $_POSTy... Twój skrypt jest podatny na SQL INJECTION
a uprawnienia... w SELECie masz gwiazdke, więc pobiera wszystkie kolumny... tak więc co to za problem w indexie tablicy odwolac sie do tej kolumny?
i przypisac ja do zmiennej session

$result[nazwa_kolumny]

Ten post edytował szmerak 27.11.2011, 18:48:08
Go to the top of the page
+Quote Post
modern-web
post
Post #3





Grupa: Zarejestrowani
Postów: 763
Pomógł: 117
Dołączył: 15.03.2010
Skąd: void

Ostrzeżenie: (0%)
-----


Dodatkowo filtruj dane; ogranicz długość ciągu wprowadzanego do programu oraz zdefiniuj odpowiedni typ zmiennej (np. jeżeli ma być to liczbą to "(int) $zmienna = 1"). Odnośnie SQL Injection - skorzystaj z mysql_real_escape_string. I tak na przyszłość, odradzam korzystania z MySQL. Poczytaj trochę o MySQLi oraz PDO. Nie dość, że szybsze to jeszcze oferują lepszą obsługę błędów (IMG:style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post
bar_kow
post
Post #4





Grupa: Zarejestrowani
Postów: 18
Pomógł: 0
Dołączył: 25.09.2011

Ostrzeżenie: (0%)
-----


Coś takiego w pliku strony dać?
$_SESSION['uprawnienia'] = $result[uprawnienia]
?
Go to the top of the page
+Quote Post
modern-web
post
Post #5





Grupa: Zarejestrowani
Postów: 763
Pomógł: 117
Dołączył: 15.03.2010
Skąd: void

Ostrzeżenie: (0%)
-----


W pliku logowania musisz przekazać wartości do sesji - tutaj robisz $_SESSION['uprawnienia'] = $result['uprawnienia'].
Następnie w pliku strony musisz sprawdzić, czy sesja o nazwie 'uprawnienia' istnieje, a potem możesz sobie to przypisać do jakiejś zmiennej ale możesz też operować na zmiennej sesji (IMG:style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post
bar_kow
post
Post #6





Grupa: Zarejestrowani
Postów: 18
Pomógł: 0
Dołączył: 25.09.2011

Ostrzeżenie: (0%)
-----


Coś mi dziś nie wychodzi... jakiegoś doła mam. Nawet nie wiem gdzie to wstawić aby działało (IMG:style_emoticons/default/sad.gif)
Go to the top of the page
+Quote Post
szmerak
post
Post #7





Grupa: Zarejestrowani
Postów: 286
Pomógł: 12
Dołączył: 23.11.2006
Skąd: WL

Ostrzeżenie: (0%)
-----


Masz pliki... logowanie.php <- odpowiedzialny za sprawdzenie czy uzytkownik podał prawidłowe dane...
i index.php <- gdy użytkownik jest zalogowany ma dostęp do np. ukrytego menu...

W każdym pliku zaczynasz sesje
session_start();

Następnie w pliku logowanie po zwalidowaniu wszystkiego ustawiasz zmienne sesyjne.

$_SESSION['is_user_logged'] = TRUE;
+
$_SESSION['user_name'] = $result[username];
+
$_SESSION['rights'] = $result[rights];

i przekierowywujesz użytkownika na stronę index.php funkcją header();

W pliku index.php musisz sprawdzić czy użytkownik jest zalogowany..
np.
session_start();
<html>
<body>
//treść dostępna dla wszystkich

i tutaj sprawdzasz czy uzytkownik jest zalogowany
if($_SESSION['is_user_logged'] == TRUE) {
//treść tylko dla zalogowanych
Twoja nazwa użytkownika to: $_SESSION['user_name'];
Twoje uprawnienia to: $_SESSION['rights'];
}

//treść dostępna dla wszystkich
</html>

i w taki sposób możesz wszędzie sprawdzać czy użytkownik jest zalogowany...
if($_SESSION['is_user_logged'] == true)
{ tutaj dla zalogowanych }

Równierz wszystkie akcje dodawania/usuwania/edytowania możesz kontrować właśnie w taki sposób dając tylko dostęp zalogowanym użytkownikom...

Aby się wylogować używasz później funkcji session_destroy();
Go to the top of the page
+Quote Post
modern-web
post
Post #8





Grupa: Zarejestrowani
Postów: 763
Pomógł: 117
Dołączył: 15.03.2010
Skąd: void

Ostrzeżenie: (0%)
-----


LOGOWANIE:
  1. <?php
  2. $login = mysql_real_escape_string(trim($_POST['login']));
  3. if($login) {
  4. $uzytkownik = $_POST['uzytkownik'];
  5. $md5_haslo = md5(mysql_real_escape_string(trim($_POST['haslo'])));
  6.  
  7. $host="localhost";
  8. $db_user="UZYTKOWNIK";
  9. $db_password="HASLO";
  10. $database="NAZWA";
  11.  
  12. mysql_connect($host, $db_user, $db_password);
  13. mysql_select_db($database);
  14.  
  15. $rezultat = mysql_query("SELECT * FROM `logowanie` WHERE `uzytkownik` = '$uzytkownik' AND `haslo` = '$md5_haslo'");
  16. if (mysql_num_rows($rezultat)) {
  17. $_SESSION['uzytkownik'] = $rezultat['uzytkownik'];
  18. $_SESSION['uprawnienia'] = $rezultat['uprawnienia'];
  19. header("location:main.php");
  20. } else {
  21. $message="<center><p algin='center'><div class='warning_box'>Nieprawid?owa nazwa u?ytkownika lub has?o!.</div></p></center>";
  22. }
  23. }
  24. ?>


STRONA:
  1. <?php
  2. if ( isset($_SESSION['uzytkownik']) && isset($_SESSION['uprawnienia']) ) {
  3. echo 'ok';
  4. } else {
  5. header("location:index.php");
  6. }
  7. ?>


Spróbuj teraz (IMG:style_emoticons/default/smile.gif)

Edit - @szmerak
Ja radziłbym wcześniej wyczyścić zawartość tablicy sesyjnej (IMG:style_emoticons/default/smile.gif) $_SESSION = array();

Ten post edytował modern-web 27.11.2011, 20:09:12
Go to the top of the page
+Quote Post
szmerak
post
Post #9





Grupa: Zarejestrowani
Postów: 286
Pomógł: 12
Dołączył: 23.11.2006
Skąd: WL

Ostrzeżenie: (0%)
-----


  1. $start_user_sess = $_SESSION['uzytkownik'] = $rezultat('uzytkownik');
  2. $start_user_priv = $_SESSION['uprawnienia'] = $rezultat('uprawnienia');

sorki ale nie wiem po co to skoro przekierowywujesz użytkownika na main.php
a po drugie dałeś nawiasy zwykłe zamiast kwadratowych

@EDIT
@up jak najbardziej zgadzam się z tym (IMG:style_emoticons/default/smile.gif) . Ja mam do tego specjalne funkcje które są dołączane na początku każdego pliku (IMG:style_emoticons/default/smile.gif)

Ten post edytował szmerak 27.11.2011, 20:05:33
Go to the top of the page
+Quote Post
bar_kow
post
Post #10





Grupa: Zarejestrowani
Postów: 18
Pomógł: 0
Dołączył: 25.09.2011

Ostrzeżenie: (0%)
-----


W pliku logowania wywala błąd w linii 3
Go to the top of the page
+Quote Post
modern-web
post
Post #11





Grupa: Zarejestrowani
Postów: 763
Pomógł: 117
Dołączył: 15.03.2010
Skąd: void

Ostrzeżenie: (0%)
-----


Faktycznie szmerak! Dzięki za czujność (IMG:style_emoticons/default/smile.gif) Z pośpiechu popełniłem tak radykalny błąd.
Przypisałem te operacje do zmiennych z jednego powodu - żeby wiedział co się w tym momencie odbywa bo widzę, że facet jest ciemny w temacie sesje (IMG:style_emoticons/default/wink.gif)

Treść błędu poproszę.

Ten post edytował modern-web 27.11.2011, 20:08:41
Go to the top of the page
+Quote Post
szmerak
post
Post #12





Grupa: Zarejestrowani
Postów: 286
Pomógł: 12
Dołączył: 23.11.2006
Skąd: WL

Ostrzeżenie: (0%)
-----


Mysql_real_escape_string możesz użyć dopiero po połączeniu się z bazą!

Przenieś to
  1. $host="localhost";
  2. $db_user="UZYTKOWNIK";
  3. $db_password="HASLO";
  4. $database="NAZWA";
  5.  
  6. mysql_connect($host, $db_user, $db_password);
  7. mysql_select_db($database);


Na samą górę pliku
Go to the top of the page
+Quote Post
bar_kow
post
Post #13





Grupa: Zarejestrowani
Postów: 18
Pomógł: 0
Dołączył: 25.09.2011

Ostrzeżenie: (0%)
-----


Warning: mysql_real_escape_string() [function.mysql-real-escape-string]: Access denied for user 'coś'@'localhost' (using password: NO) in /home/xxxx/domains/xxxxx.eu/public_html/xxxxx/index.php on line 3

Warning: mysql_real_escape_string() [function.mysql-real-escape-string]: A link to the server could not be established in /home/xxx/domains/xxxx.eu/public_html/xxxxx/index.php on line 3

Ten post edytował bar_kow 27.11.2011, 20:10:40
Go to the top of the page
+Quote Post
modern-web
post
Post #14





Grupa: Zarejestrowani
Postów: 763
Pomógł: 117
Dołączył: 15.03.2010
Skąd: void

Ostrzeżenie: (0%)
-----


Najlepiej wywal poza katalog publiczny strony gdzieś katalog wyżej i użyj require do zaimportowania.
Go to the top of the page
+Quote Post
Mayka
post
Post #15





Grupa: Zarejestrowani
Postów: 304
Pomógł: 1
Dołączył: 12.01.2009
Skąd: Kanapa

Ostrzeżenie: (0%)
-----


No bo to że musisz wpisać swoje dane do logowania do sql'a to oczywiście wiesz (IMG:style_emoticons/default/wink.gif)

Ten post edytował Mayka 27.11.2011, 20:12:36
Go to the top of the page
+Quote Post
szmerak
post
Post #16





Grupa: Zarejestrowani
Postów: 286
Pomógł: 12
Dołączył: 23.11.2006
Skąd: WL

Ostrzeżenie: (0%)
-----


Zrób tak weź utwórz osobny plik connect.php daj tam funkcję łączące się z bazą
a tam gdzie potrzebujesz łączyć się z bazą daj require './connect.php'; na samej górze

gotowca chyba nie musze ci dawać?

tak btw... taką masz nazwę użytkownika? Access denied for user 'coś'@'localhost'

"coś"?

Ten post edytował szmerak 27.11.2011, 20:15:38
Go to the top of the page
+Quote Post
modern-web
post
Post #17





Grupa: Zarejestrowani
Postów: 763
Pomógł: 117
Dołączył: 15.03.2010
Skąd: void

Ostrzeżenie: (0%)
-----


A skąd pewność, że nie jest to subdomena ;>? W tym wypadku pozostaje luka bezpieczeństwa przez domenę. Lepiej żeby wywalił ten katalog/plik ZUPEŁNIE poza public_html (w przypadku XAMPPA - poza htdocs)

@ nie używa się polskich znaków w programowaniu - wbij to sobie do głowy (IMG:style_emoticons/default/smile.gif)

Ten post edytował modern-web 27.11.2011, 20:16:48
Go to the top of the page
+Quote Post
bar_kow
post
Post #18





Grupa: Zarejestrowani
Postów: 18
Pomógł: 0
Dołączył: 25.09.2011

Ostrzeżenie: (0%)
-----


Mayka, wiem wiem
Wywalił błąd w linii 23, poprawiłem nawiasy z ( ) na [ ] błąd zniknął. Teraz mam błąd w pliku strony
Warning: session_start() [function.session-start]: Cannot send session cache limiter - headers already sent (output started at

Linia 4:
session_start();

Warning: Cannot modify header information - headers already sent by (output started at /ho

Linia 8:
header("location:index.php");
Go to the top of the page
+Quote Post
modern-web
post
Post #19





Grupa: Zarejestrowani
Postów: 763
Pomógł: 117
Dołączył: 15.03.2010
Skąd: void

Ostrzeżenie: (0%)
-----


dodaj

ob_start();

w 2 linijce kodu (pod session_start()(IMG:style_emoticons/default/wink.gif) i

ob_end_flush();

na końcu pliku
Go to the top of the page
+Quote Post
szmerak
post
Post #20





Grupa: Zarejestrowani
Postów: 286
Pomógł: 12
Dołączył: 23.11.2006
Skąd: WL

Ostrzeżenie: (0%)
-----


To znaczy że nagłówki zostały już wysłane...
Musisz wykonać te funkcje przed wyświetleniem czegokolwiek!
Go to the top of the page
+Quote Post

2 Stron V   1 2 >
Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 23.12.2025 - 12:17