Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Sesje, zarządzanie
hawk
post
Post #1





Grupa: Zarejestrowani
Postów: 521
Pomógł: 0
Dołączył: 3.11.2003
Skąd: 3city

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


Parę trudnych (dla mnie winksmiley.jpg ) pytań z zakresu wbudowanych w php sesji:

1) Można się jakoś dowiedzieć, czy sesja jest nowa (świeżo założona), prościej i lepiej niż coś mniej więcej takiego (fuj, co za potworek!):
  1. <?php
  2. $isNew = ! (ini_get('session.use_cookies') && isset($_COOKIE[session_name()])) || (!ini_get('session.use_only_cookies') && (isset($_POST[session_name()]) || isset($_GET[session_name()])));
  3. ?>


2) Można jakoś skutecznie zniszczyć sesję? Nie usunąć wszystkie zmienne z sesji - session_unset(). Tylko rozwalić samą sesję. Znalazłem coś takiego:
  1. <?php
  2.  $CookieInfo = session_get_cookie_params();
  3.  if ( (empty($CookieInfo['domain'])) && (empty($CookieInfo['secure'])) ) {
  4.  setcookie(session_name(), '', time()-3600, $CookieInfo['path']);
  5.  } elseif (empty($CookieInfo['secure'])) {
  6.  setcookie(session_name(), '', time()-3600, $CookieInfo['path'], $CookieInfo['domain']);
  7.  } else {
  8.  setcookie(session_name(), '', time()-3600, $CookieInfo['path'], $CookieInfo['domain'], $CookieInfo['secure']);
  9.  }
  10.  unset($_COOKIE[session_name()]);
  11. ?>

Chociaż nie wiem, co tak naprawdę robi session_destroy(). Jeżeli nie usuwa pliku z sesją, to przy następnym żądaniu wystarczy podać SID w cookie lub w URLu i znowu mamy starą sesję (choć pewnie pustą).

3) Jak w sposób pewny i skuteczny wygenerować nowy SID dla istniejącej sesji. Co prawda jest funkcja session_regenerate_id(), która nawet wysyła nowe ciastko, ale...
- co się dzieje ze starym plikiem sesji? bo zakładam że tworzony jest nowy
- co się dzieje ze starym cookie?
Znowu, oczekiwałbym, że bo wygenerowaniu nowego SIDa starej sesji w ogóle i nieodwracalnie nie ma.
Go to the top of the page
+Quote Post
Arrow
post
Post #2





Grupa: Zarejestrowani
Postów: 43
Pomógł: 0
Dołączył: 5.05.2003

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


no jesli chodzi o usuwanie to wziete zywcem z php.net

  1. <?php
  2.  
  3. // Inicjalizuj sesję
  4. // Jeśli używasz sesion_name(\"cośtam\"), nie zapomnij o tym teraz!
  5. // Usuń wszystkie zmienne sesyjne
  6. // Na koniec, zniszcz sesję
  7.  
  8. ?>


Opis sesji


--------------------
Pozdrawiam Bartosz
Go to the top of the page
+Quote Post
hawk
post
Post #3





Grupa: Zarejestrowani
Postów: 521
Pomógł: 0
Dołączył: 3.11.2003
Skąd: 3city

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


aaevil.gif
Wbrew pozorom manual już dawno przeczytałem, tylko on w sumie nic nie daje. Co wg ciebie robi session_destroy() ? Co z tego że sesja już nie istnieje w tym skrypcie? Równie dobrze mogę sobie zrobić unset($_SESSION) i też nie ma już sesji.

A jak ktoś ponownie wejdzie na stronę z tym samym cookie, to będzie to ta sama sesja, czy nie? To właśnie rozumiem przez zniszczenie sesji - jak nie ma, to nie ma i już. I jesteśmy znowu w punkcie wyjścia sad.gif.
Go to the top of the page
+Quote Post
bregovic
post
Post #4





Grupa: Zarejestrowani
Postów: 562
Pomógł: 15
Dołączył: 8.08.2003
Skąd: Denmark/Odense

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


Może to chamski sposób, ale możesz napisać własnego session handlera, i w ten sposób być pewnym tego co dzieje się z plikami tmp - no i wtedy możesz sprawdzać filemtime i inne fajne żeczy... AFAIK lepiej chyba zawsze pisać własnego handlera, jeśli w grę wchodzi bezpieczeństwo i stabilność sesji.


--------------------
Prank - for the fun. Mac - for the simplicity. Deviantart - for the kick.
Life is ours, We live it our way -- Metallica
Go to the top of the page
+Quote Post
Chewolf
post
Post #5





Grupa: Zarejestrowani
Postów: 335
Pomógł: 0
Dołączył: 15.11.2003

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


Cytat
session_register(); // rejestrowanie
session_unregister(); //wyrejestrowanie zmiennej
session_is_registered() w warunku if sprawdzane zostaje czy zmiena jest zarejestrowana
!session_is_registered() w warunku if sprawdzane zostaje czy zmiena nie jest zarejestrowana

tu jest ładnie opisane : no to CHop

Ten post edytował m5910 30.11.2004, 21:37:47
Go to the top of the page
+Quote Post
sf
post
Post #6





Grupa: Zarejestrowani
Postów: 1 597
Pomógł: 30
Dołączył: 19.02.2003
Skąd: Tychy

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


Jeżeli damy unset($SESSION .. to niszczymy dane zapisane na serwerze. Zrobiłem przed chwilą test i zauważyłem, że po akcji usunięcia sesjii plik nie jest usuwany, ale czyszczony. Czyli nic nie zawiera. Nawet jeżeli przez url wyślemy ponownie ten sam SID to i tak się nie zalogujemy bo musimy od nowa wprowadzić dane sesyjne, a robi to przecież nasz skrypt gdy wyślemy nasz login i hasło. Nie wiem co mają do tego cookie winksmiley.jpg

Acha, zauważyłem też, że jeżeli po wylogwaniu, a następnie ponownym zalogowaniu, zmienne sesyjne zapiszą się ponownie do pliku,w którym wcześniej były nasze dane.

Ten post edytował sf 30.11.2004, 22:32:52


--------------------
Zapraszam na mój php blog, tworzenie stron.
Go to the top of the page
+Quote Post
hawk
post
Post #7





Grupa: Zarejestrowani
Postów: 521
Pomógł: 0
Dołączył: 3.11.2003
Skąd: 3city

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


@m5910: session_register() i tak nie powinno się używać z $_SESSION, a że $_SESSION jest zalecane, więc session_register() nie powinno się w ogóle używać. Podobnie reszta podanych funkcji.

@sf: no właśnie, plik zostaje. Trochę szkoda, bo przy następnym wejściu wszelkie znaki na niebie i ziemii będą wskazywać, że mamy do czynienia z kontynuacją sesji - bo mamy - chociaż tak naprawdę to chciałbym np. mieć już całkiem nową.

Co do $_SESSION, to jest bardzo dziwny zwierz winksmiley.jpg. Też zrobiłem trochę testów i wyszło że magiczna jest sama nazwa $_SESSION. Bo:
1) przed session_start isset($_SESSION) == false
2) po session_start można zrobić unset($_SESSION) i... sesji nie ma, oczywiście, ale...
3) kawałek dalej można zrobić $_SESSION = array('foo'=>'bar') i sesja znowu jest, i...
4) co najśmieszniejsze, jak stworzę sobie nową zmienną o nazwie $_SESSION, to jest to znowu super-global, czyli - jak pisałem - sama nazwa jest magiczna.
Go to the top of the page
+Quote Post
tahat
post
Post #8





Grupa: Zarejestrowani
Postów: 13
Pomógł: 0
Dołączył: 6.11.2003
Skąd: Łódź

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


Cytat(hawk @ 2004-11-29 20:57:29)
Chociaż nie wiem, co tak naprawdę robi session_destroy(). Jeżeli nie usuwa pliku z sesją, to przy następnym żądaniu wystarczy podać SID w cookie lub w URLu i znowu mamy starą sesję (choć pewnie pustą).

Poobserwuj jak sie zachowuja pliki w katalogu sessions przy wywolywaniu konkretnych funkcji.

Ponizszy kod calkowicie usuwa plik sesji:
  1. <?php
  2. unset($_SESSION['login_setup']);
  3. header (&#092;"Location: ./?logout=ok\");
  4. ?>
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: 19.08.2025 - 21:58