• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

[PHP] oddzielne panele logowania

Object Storage Arubacloud
0 głosów
366 wizyt
pytanie zadane 15 czerwca 2023 w PHP przez dominik808 Nowicjusz (140 p.)

Witam, mam na stronie 2 "panele", jeden użytkownika a drugi administracyjny, każdy w osobnym folderze. Aktualnie gdy zaloguje się do jednego panelu, moge swobodnie przechodzić do drugiego poprzez zmienienie nazwy folderu w linku. Wszystko jest jakby w jednej sesji.

Chciałbym aby te 2 panele były od siebie odosobnione i użytkownik zalogowany na jeden, nie był jednocześnie zalogowany na tym drugim.

Próbowałem jakoś zakończyć sesje np. funkcją session_destroy() ale nie działało to tak jak powinno.

Z góry dzięki za pomoc

pozdrawiam

 

(kod w obu panelach wygląda tak samo)

<?php

	session_start();
	
	if ((!isset($_POST['login'])) || (!isset($_POST['haslo'])))
	{
		header('Location: index.php');
		exit();
	}

	require_once "connect.php";

	$polaczenie = @new mysqli($host, $db_user, $db_password, $db_name);
	
	if ($polaczenie->connect_errno!=0)
	{
		echo "Error: ".$polaczenie->connect_errno;
	}
	else
	{
		$login = $_POST['login'];
		$haslo = $_POST['haslo'] ;
		
		$login = htmlentities($login, ENT_QUOTES, "UTF-8");
		$haslo = htmlentities($haslo, ENT_QUOTES, "UTF-8");
		
		
		if ($rezultat = @$polaczenie->query(
	
			sprintf( "SELECT * FROM uzytkownicy WHERE user='%s' AND pass='%s'",
		
		mysqli_real_escape_string($polaczenie,$login),
		mysqli_real_escape_string($polaczenie, $haslo))))
		{
			$ilu_userow = $rezultat->num_rows;
			if($ilu_userow>0)
			{ 
			
				$_SESSION['zalogowany'] = true;
				$wiersz = $rezultat->fetch_assoc();
				$_SESSION['user'] = $wiersz['user'];
				unset($_SESSION['blad']);
				$rezultat->free_result();
				header('Location: gra.php');
				
			} else {
				
				$_SESSION['blad'] = '<span style="color:red">Nieprawidłowy login lub hasło!</span>';
				header('Location: index.php');
				
			}
			
		}
		
		$polaczenie->close();
	}
	
?>

w pliku panelu  po zalogowaniu (gra.php) kod php wygląda tak:

<?php

	session_start();
	
	if (!isset($_SESSION['zalogowany']))
	{
		header('Location: index.php');
		exit();
	}
	
?>

 

3 odpowiedzi

0 głosów
odpowiedź 15 czerwca 2023 przez Arkadiusz Waluk Ekspert (287,950 p.)
Prawdopodobnie sprawdzasz w obydwu panelach tę samą sesję. Przy logowaniu w linii 39 i 41 ustawiasz, że ktoś jest zalogowany i rekord z jego danymi. Musiałbyś ustawiać tutaj inne klucze w sesji dla usera i dla admina, a dalej w pliku gdzie sesja jest sprawdzana jak np. gra.php ponownie sprawdzać odpowiedni klucz dla admina lub usera.

Zakończenie sesji przez session_destroy() spowoduje zakończenie danej sesji PHP, a więc w praktyce wylogowanie ze wszystkiego gdzie ktoś był zalogowany w danej sesji, nie spowoduje to oddzielenia paneli. To co mógłbyś zrobić w kwestii samego mechanizmu sesji to rozpoczynać osobne sesje dla danych podkatalogów lub zrobić osobne subdomeny i sesje pod nie.

Jednak jeżeli to co robisz jest w rzeczywistości jedną aplikacją, która po prostu posiada dwa oddzielne logowania, to jednak zrobiłbym w sposób opisany na samym początku lub podszedł do tego jeszcze inaczej i nadawał użytkownikom role w bazie danych. Czyli logowanie byłoby wspólne (lub nawet oddzielne, z weryfikacją roli), sesja byłaby jedna i pod tym samym kluczem, a później już przy próbie dostępu do danego miejsca weryfikowane byłoby czy ktoś ma do tego dostęp na podstawie nadanej roli (a nie nazwy klucza z sesji jak opisałem na początku). Zależy tak naprawdę jak chce się do tego podejść, ten sposób uniemożliwi bycie zalogowanym na dwa różne konta na raz, będzie to jedno konto które może mieć co najwyżej różne role na raz jeśli tak zrobisz.
0 głosów
odpowiedź 16 czerwca 2023 przez neo1020 Dyskutant (8,430 p.)

https://forum.pasja-informatyki.pl/551494/uzytkownicy-mysql-ograniczenia-dostepu-sesionid-nieuprawniony-dostep-do-bazy#a551564

Przeczytaj ten wątek na forum

nie możesz w 2 przypadkach mieć ten samej zmiennej sesyjnej 

$_SESSION['zalogowany'] 

$_SESSION['zalogowany']

ŹLE

$_SESSION['zalogowany_user']

$_SESSION['zalogowany_admin']

DOBRZE

 

0 głosów
odpowiedź 16 czerwca 2023 przez bulgotnik86 Gaduła (3,040 p.)
Na pewno musisz nadać rolę uzytkownikom: admin i user np. Następnie sprawdź jaką rolę ma dany zalogowany  użytkownik i na bazie tego przyznawaj dostęp. Jeśli chciał byś skorzystać z frameworka zastosuj mechanizm middleware

Podobne pytania

0 głosów
2 odpowiedzi 207 wizyt
pytanie zadane 3 października 2017 w SQL, bazy danych przez krzysztooof94 Początkujący (350 p.)
0 głosów
1 odpowiedź 151 wizyt
pytanie zadane 17 września 2018 w HTML i CSS przez BlinkyShay Obywatel (1,190 p.)
0 głosów
1 odpowiedź 250 wizyt
pytanie zadane 8 czerwca 2022 w Inne języki przez betterlatethannever Początkujący (460 p.)

92,579 zapytań

141,432 odpowiedzi

319,664 komentarzy

61,964 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...