Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]Pyt. odnośnie sesji
Forum PHP.pl > Forum > Przedszkole
nait
Witam, trochę szukałem na ten temat aczkolwiek nic ciekawego nie znalazłem. Mianowicie mam sprawdzenie poprawności sesji
  1.  
  2. function SessionAuth() {
  3. if (!(isset($_SESSION['auth']) && isset($_SESSION['user']) && $_SESSION['user_ip'] && $_SESSION['user_browser'] &&
  4. 1 == $_SESSION['auth'] && $_SESSION['user_ip'] == IP() && $_SESSION['user_browser'] == $_SERVER['HTTP_USER_AGENT'])) {
  5. $_SESSION['reports']['message'] = 'Nie jesteś zalogowany';
  6. $_SESSION['reports']['type'] = 'info';
  7. header ('Location: login.php');
  8. }
  9. }


I sprawdzenie wykonuje na każdej jakby głównej stronie, ale co z includowanymi plikami z trescią, funkcjami, połączeniem itd? W każdym jednym powinienem sprawdzać czy ktoś jest zalogowany czy nie? Chodzi mi tu głównie o sytuację gdy ktoś wpiszę w przeglądarkę bezpośredni link do jakiegoś tam includowanego pliczku typu inc/cos.php itp itd.
Dodam, że to taki mały panel admina więc osoba niezalogowana nie powinna nic widzieć.

A drugie pytanie, gdy wylogowuję użyć ession_unset() i session_destroy() czy np wystarczy unset zmienne sesyjne, które zapisałem?

Jeszcze jedno pytanko tongue.gif Jak lepiej czyścić tablicę komunikatów, unset($_SESSION['reports']) czy po prostu $_SESSION['reports'] = array();
peter13135
1.Najprościej będzie jak zdefiniujesz w pliku do którego includujesz inne pliki jakąś zmienną, np $in=true; a w plikach które są includowane sprawdź, czy istnieje zmienna in, dzięki temu będziesz mógł blokować dostęp do pliku "bezpośrednio".
Gdy poznasz obiektowość, modułowość, to rozwiążesz to w inny sprytniejszy sposób.

2. Jak Ci wygodnie.
3. Jak CI wygodnie. Różnica polega na tym, że unset usunie Ci ten element tablicy, a drugi sposób przypisze do niego pustą tablicę.

$_SESSION jest tablicą, pusta tablica to array(), więc czyszczyć sesje można dzięki $_SESSION = array(). Wtedy sesja będzie pustą tablicą tak jak w stanie "początkowym" To co ty robisz to po prostu przypisywanie do jednego z elementów tablicy pustej tablicy. Jeśli w Twoim skrypcie ten element jest tablicą, to wyzerowanie go przypisująć array() jest dobrym sposobem, dzięki temu gdy podasz ten element funkcjion tablicowym, czy pętli foreach nie otrzymasz błedu.
nait
Możesz trochę rozwinąć troszkę 1 myśl? W zasadzie mogę wykorzystać $_SESSION['auth']?
peter13135
Hmm... a możesz rozwinąć pytanie ? Bo teraz nie jestem pewny, czy dobrze odpowiedziałem.
nait
Cytat(peter13135 @ 27.09.2011, 01:02:56 ) *
1.Najprościej będzie jak zdefiniujesz w pliku do którego includujesz inne pliki jakąś zmienną, np $in=true; a w plikach które są includowane sprawdź, czy istnieje zmienna in, dzięki temu będziesz mógł blokować dostęp do pliku "bezpośrednio".


Możesz rozwinąć troszkę ten pomysł? I czy nie mógłbym tu wykorzystać $_SESSION['auth']?
CuteOne
Od tego są stałe.

index.php
  1.  
  2. define('INCLUDED', true);
  3.  
  4. include 'pliczek.php';


pliczek.php
  1. if(!defined('INCLUDED') || !INCLUDED) {
  2.  
  3. die('hahah');
  4. }
nait
Dzięki wielkie, przerobie wedle potrzeb.
Kolejne pytanie wstydnis.gif

  1. function SessionAuth() {
  2. if (!(isset($_SESSION['auth']) && isset($_SESSION['user']) && $_SESSION['user_ip'] && $_SESSION['user_browser'] &&
  3. 1 === $_SESSION['auth'] && $_SESSION['user_ip'] === IP() && $_SESSION['user_browser'] === $_SERVER['HTTP_USER_AGENT'])) {
  4. session_regenerate_id(); // <--- ?
  5. $_SESSION['reports']['message'] = 'Nie jesteś zalogowany';
  6. $_SESSION['reports']['type'] = 'info';
  7. header ('Location: login.php');
  8. }
  9. }


Tak czytałem o bezpieczeństwu sesji i nie wiem czy dobrze zakumałem, ale jeśli autoryzacja nie powiodła się powinienem wygenerować nowe id sesji przy pomocy session_regenerate_id();?
Czy tylko przy inicjowaniu jej tak jak miałem dotychczas czyli:
  1. // jakis tam kod
  2. $_SESSION['id'] = session_id();
  3. $_SESSION['auth'] = 1;
  4. $_SESSION['user'] = $login;
  5. $_SESSION['user_ip'] = IP();
  6. $_SESSION['user_browser'] = $_SERVER['HTTP_USER_AGENT'];
  7. header ('Location: admin.php');




Edit: tak patrze na inne cmsy i czy jest sens blokowania innych includowanych plikow?
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.