Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Logowanie z konta użytkownika do panelu administracyjnego
Forum PHP.pl > Forum > PHP
joka13
Witam
Mam na stronie dwie grupy użytkowników:
- zwykli użytkownicy
- użytkownicy z dostępem do panelu administracyjnego.
Ci wszyscy użytkownicy są zapisani w jednej tabeli - rozróżniam ich na podstawie pola ranga (0 lub 1).

Ma działać to na takiej zasadzie, że wszyscy logują się za pomocą jednego formularza (kod, który mam wstawię niżej).
Następnie osoby, które mają mieć możliwość logowania się na konto admina (w polu ranga jest '1') po zalogowaniu się mają możliwość kliknięcia w link 'Panel adm...' (dodam, że login do pa i konta użytkownika jest taki sam) i zalogowania się do niego.

Mój problem dotyczy tej ostatniej kwestii, a mianowicie - jak zrobić, aby użytkownik mógł zalogować się do PA oraz podczas tej autoryzacji było sprawdzane, czy sesja użytkownika jest aktywna.

Oto fragmenty kodu:

funkcja admin_sesja:
  1. function admin_sesja ($wygasa){
  2. session_name('admin_sid');
  3. if(isset($_SESSION['start_time'])){
  4. if((time() - $_SESSION['start_time']) > $wygasa){
  5. redirect('./login.php');
  6. }
  7. }
  8. $_SESSION['start_time'] = time();
  9. }



index.php
  1. admin_sesja($config['admin_wygasa']); // funkcja sprawdzająca, czy sesja nie wygasła
  2. if(!isset($_SESSION['logged_admin'])){
  3. redirect('./login.php');
  4. }



login.php
  1. if(isset($_SESSION['logged_admin'])){
  2. redirect('./index.php');
  3. }
  4.  
  5. if(isset($_POST['login']) && isset($_POST['haslo'])){
  6. if(sprawdz_login($_POST['login'],$_POST['haslo'],$mysql['prefix']))
  7. {
  8. $_SESSION['logged_admin'] = 1;
  9. $_SESSION['login'] = $_POST['login'];
  10. $_SESSION['StartTimestamp'] = time();
  11. $_SESSION['UserIP'] = $_SERVER['REMOTE_ADDR'];
  12. $_SESSION['UserAgent'] = $_SERVER['HTTP_USER_AGENT'];
  13. redirect('./index.php');
  14. }
  15. }




Edit
Witam
Nie macie żadnego pomysłu jak się za to zabrać?
Może coś źle wyjaśniłem?
wiiir
aktualnie tez zmierzam do zrobienia PA i ja chce to zrobic mniej wiecej tak...

Loguje sie normalnie jako uzytkownik, jesli uzytkownik ma prawa do PA klika wiec i dostaje logowanie, do czy ma sie wyswietlic logowanie czy odrazu PA sprawdzam w sesji czyli $_SESSION['zmienna dla admina']... jesli jest true oraz $_SESSION['zmienna dla usera'] tez jest true to wchodze do PA, jesli tylko $_SESSION['zmienna dla usera'] jest true to daje logowanie do PA i po zalogowaniu ustawiam $_SESSION['zmienna dla admina'], jesli wogole to $_SESSION['zmienna dla usera'] jest false to calkowicie wyswietlam logowanie do serwisu... a wylogowanie mozna osobno zrobic dla PA i z serwisu, wystarczy wywalic $_SESSION['zmienna dla admina']... mozna cos tam jeszcze pododawac zeby bylo bezpieczniej itd
joka13
Próbowałem już takiej metody, ale problem jest tego typu, że pliki użytkownika i administratora są w dwóch różnych katalogach (także logowanie jest w dwóch różnych plikach). Wiąże się to z tym, że pojęcia nie mam w jaki sposób przekazać wartość $_SESSION['login_user'] do innego pliku.
nemis
Twój błąd polega na inicjacji sesji (session_start()) w jednej z funkcji.

Użyj session_start() na początku swojego pliku index.php, a we wszystkich plikach sesja będzie taka sama.
wiiir
Cytat(nemis @ 27.04.2010, 22:59:53 ) *
Twój błąd polega na inicjacji sesji (session_start()) w jednej z funkcji.

Użyj session_start() na początku swojego pliku index.php, a we wszystkich plikach sesja będzie taka sama.



no chyba musi miec wszedzie session_start inaczej nie bedzie mogl zweryfikowac czy jest sesja...
joka13
Dokładnie tak, mam wszędzie session_start.

Problem w tym, że w pliku, gdzie jest logowanie admina chciałbym dać takie coś w warunku if:
$_SESSION['login'] == loginu podanego przez użytkownika podczas logowania do admina

$_SESSION['login'] - jest to login użytkownika zapisanego w sesji, gdy tenże użytkownik się zalogował. Problem polega na tym, że nie wiem jak wartość $_SESSION['login'] przekazać do pliku, gdzie odbywa się cały proces logowania admina.
wiiir
Ale przeciez tego nie przekazujesz zobacz:

index.php

  1. if(!isSet($_SESSION['zalogowany'])){
  2. include_once 'zalogwany.php';
  3. }else{
  4. #header albo include co tam zrobisz
  5. header('location: logowanie.php');
  6.  
  7. }

zalogowany.php
  1. echo 'Witaj'.$_SESSION['zalogowany'];

logowanie.php
  1. echo 'Teraz ustawiam sesje';
  2. $_SESSION['zalogowany']='Osoba testowa';
  3. header('refresh:5;url:index.php')


Zrob sobie te 3 pliczki i zobacz jak to dziala.... chociaz dziwie sie ze nie wiesz jak zrobic logowanie dla admina jak masz normalne logowanie.
Zmiennych sesyjnych sie nie przekazuje .. sa to zmienne sesyjne czyli istnieja dopoki nie ma np: session_destroy();
gigzorr
W bazie danych masz np. tabele rejestracja , i tam sa dajmy na to 4 kolumny
user/pw/repeatpw/ranga


Tworzysz sesje/tablice ->

$_SESSION['UserStatus'] = $result[0]['status'];


  1. if($_SESSION['UserStatus'] == 1)
  2. {
  3. // kod dla admina , dajmy na to ze admin to 1 a user 0
  4. }
  5.  
  6. elseif ($_SESSION['UserStatus'] == 0)
  7. {
  8. // kod dla uzytkownika
  9.  
  10. }

joka13
Nie zrozumieliśmy się.
Ja nie chciałem kontynuować sesji użytkownika, lecz otworzyć zupełnie nową dla admina - z warunkiem, że sesja admina może być otwarta tylko wtedy, gdy sesja konkretnego użytkownika jest aktywna.
@gigzorr podsunął mi pomysł jak rozwiązać problem w inny sposób.

Dzięki
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.