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

[PHP] oddzielne panele logowania

42 Warsaw Coding Academy
0 głosów
639 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 (290,090 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,950 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 293 wizyt
pytanie zadane 3 października 2017 w SQL, bazy danych przez krzysztooof94 Początkujący (350 p.)
0 głosów
1 odpowiedź 185 wizyt
pytanie zadane 17 września 2018 w HTML i CSS przez BlinkyShay Obywatel (1,190 p.)
0 głosów
1 odpowiedź 326 wizyt
pytanie zadane 8 czerwca 2022 w Inne języki przez betterlatethannever Początkujący (460 p.)

93,379 zapytań

142,380 odpowiedzi

322,534 komentarzy

62,737 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

VMware Cloud PRO - przenieś swoją infrastrukturę IT do chmury
...