![]() ![]() |
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:
Plik strony (sesja):
Proszę o pomoc... Edit: Pobieranie nazwy użytkownika np.: Myślałem o tym $_SESSION['uprawnienia'] ale nie działa...; Ten post edytował bar_kow 27.11.2011, 18:28:23 |
|
|
|
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 |
|
|
|
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)
|
|
|
|
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] ? |
|
|
|
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) |
|
|
|
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)
|
|
|
|
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(); |
|
|
|
Post
#8
|
|
|
Grupa: Zarejestrowani Postów: 763 Pomógł: 117 Dołączył: 15.03.2010 Skąd: void Ostrzeżenie: (0%)
|
LOGOWANIE:
STRONA:
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 |
|
|
|
Post
#9
|
|
|
Grupa: Zarejestrowani Postów: 286 Pomógł: 12 Dołączył: 23.11.2006 Skąd: WL Ostrzeżenie: (0%)
|
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 |
|
|
|
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
|
|
|
|
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 |
|
|
|
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
Na samą górę pliku |
|
|
|
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 |
|
|
|
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.
|
|
|
|
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 |
|
|
|
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 |
|
|
|
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 |
|
|
|
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"); |
|
|
|
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 |
|
|
|
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! |
|
|
|
![]() ![]() |
|
Aktualny czas: 23.12.2025 - 06:21 |