Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [PHP]Pyt. odnośnie sesji
nait
post
Post #1





Grupa: Zarejestrowani
Postów: 41
Pomógł: 3
Dołączył: 30.03.2009

Ostrzeżenie: (0%)
-----


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();

Ten post edytował nait 26.09.2011, 23:24:55
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 6)
peter13135
post
Post #2





Grupa: Zarejestrowani
Postów: 1 447
Pomógł: 191
Dołączył: 26.03.2008

Ostrzeżenie: (0%)
-----


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.


--------------------
:)
Go to the top of the page
+Quote Post
nait
post
Post #3





Grupa: Zarejestrowani
Postów: 41
Pomógł: 3
Dołączył: 30.03.2009

Ostrzeżenie: (0%)
-----


Możesz trochę rozwinąć troszkę 1 myśl? W zasadzie mogę wykorzystać $_SESSION['auth']?
Go to the top of the page
+Quote Post
peter13135
post
Post #4





Grupa: Zarejestrowani
Postów: 1 447
Pomógł: 191
Dołączył: 26.03.2008

Ostrzeżenie: (0%)
-----


Hmm... a możesz rozwinąć pytanie ? Bo teraz nie jestem pewny, czy dobrze odpowiedziałem.


--------------------
:)
Go to the top of the page
+Quote Post
nait
post
Post #5





Grupa: Zarejestrowani
Postów: 41
Pomógł: 3
Dołączył: 30.03.2009

Ostrzeżenie: (0%)
-----


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']?

Ten post edytował nait 27.09.2011, 15:41:54
Go to the top of the page
+Quote Post
CuteOne
post
Post #6





Grupa: Zarejestrowani
Postów: 2 958
Pomógł: 574
Dołączył: 23.09.2008
Skąd: wiesz, że tu jestem?

Ostrzeżenie: (0%)
-----


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. }


Ten post edytował CuteOne 27.09.2011, 17:43:08
Go to the top of the page
+Quote Post
nait
post
Post #7





Grupa: Zarejestrowani
Postów: 41
Pomógł: 3
Dołączył: 30.03.2009

Ostrzeżenie: (0%)
-----


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?

Ten post edytował nait 27.09.2011, 20:50:18
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 22.08.2025 - 01:48