Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [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 (IMG:style_emoticons/default/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
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 (IMG:style_emoticons/default/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
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 22.08.2025 - 15:03