Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [Session Handler] Autologowanie, mysql
tiraeth
post 26.06.2005, 18:44:30
Post #1





Grupa: Przyjaciele php.pl
Postów: 1 789
Pomógł: 41
Dołączył: 30.10.2003
Skąd: Wrocław

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


Witam,

nigdzie nie znalazłem odpowiedzi na nurtujące mnie pytanie. Jak utworzyć tzw. autologowanie na session handlerze wykorzystującym bazę danych jako miejsce przetrzymywania danych?

Struktura tabeli sessions
Kod
session_id | session_time | session_start | session_value |


Część kodu session_handler'a
  1. <?php
  2. # tworzymy nowy obiekt klasy
  3. $ses_class = new session(); 
  4.  
  5. # podmieniamy funkcje sesji php aby mozna bylo uzywac klasy
  6. session_set_save_handler (array(&$ses_class, '_open'), 
  7. array(&$ses_class, '_close'), 
  8. array(&$ses_class, '_read'), 
  9. array(&$ses_class, '_write'), 
  10. array(&$ses_class, '_destroy'), 
  11. array(&$ses_class, '_gc')); 
  12.  
  13. # startujemy sesje
  14.  
  15. class session 
  16. {
  17.  # polaczenie z baza (potrzebne do _open)
  18.  function db_connect()
  19.  { 
  20. // ...
  21.  } 
  22.  
  23.  function _open($path, $name)
  24.  {
  25. // ...
  26.  } 
  27.  
  28.  function _close()
  29.  { 
  30. // ...
  31.  } 
  32.  
  33.  function _read($ses_id)
  34.  { 
  35. // ...
  36.  } 
  37.  
  38.  function _write($ses_id, $data)
  39.  { 
  40. // ...
  41.  } 
  42.  
  43.  function _destroy($ses_id)
  44.  { 
  45. // ...
  46.  } 
  47.  
  48.  function _gc($life)
  49.  { 
  50. // ...
  51.  } 
  52. } 
  53. ?>


Kodu z funkcji nie podaję bo każdy wie na jakiej zasadzie działa smile.gif
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 15)
crash
post 26.06.2005, 19:16:16
Post #2





Grupa: Przyjaciele php.pl
Postów: 2 196
Pomógł: 2
Dołączył: 17.01.2004
Skąd: Sosnowiec

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


A co rozumiesz przez autologowanie? Bo jeśli to co ja (automatycznie zalogowanie użytkownika) to sama sesja tu niewiele daje...

Ten post edytował crashu 26.06.2005, 19:20:09


--------------------
Go to the top of the page
+Quote Post
tiraeth
post 26.06.2005, 19:43:46
Post #3





Grupa: Przyjaciele php.pl
Postów: 1 789
Pomógł: 41
Dołączył: 30.10.2003
Skąd: Wrocław

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


Mam sobie formularz logowania, i gdy zaznaczę opcję zapamiętaj mój login, chcę aby po wyłączeniu przeglądarki i włączeniu strony ponownie (np. po 2 godzinach) sesja była aktywna - coś jak w phpBB - najlepiej gdyby ważność autologowania była ustawiona na 72 godziny (3dni).
Go to the top of the page
+Quote Post
crash
post 26.06.2005, 19:57:29
Post #4





Grupa: Przyjaciele php.pl
Postów: 2 196
Pomógł: 2
Dołączył: 17.01.2004
Skąd: Sosnowiec

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


No to w czym problem? Ustawiasz ciacho z np. ID usera i może zhashowanym hasłem dla pewności. Przy wejściu na stronę sprawdzasz czy takie dane istnieją, jeśli tak i są poprawne wykonujesz to samo co przy logowaniu. Możesz też zrobić sesje ważną przez te 72 godziny. Niewiele ma to wspólnego typowo z session handlerem a i na pewno niedużo z php Pro.

Ten post edytował crashu 26.06.2005, 19:58:16


--------------------
Go to the top of the page
+Quote Post
aleksander
post 26.06.2005, 20:33:08
Post #5





Grupa: Przyjaciele php.pl
Postów: 742
Pomógł: 0
Dołączył: 14.12.2003
Skąd: Gdańsk, Trójmiasto

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


php Pro => php
Go to the top of the page
+Quote Post
Nievinny
post 27.06.2005, 09:17:55
Post #6





Grupa: Zarejestrowani
Postów: 134
Pomógł: 0
Dołączył: 27.01.2005
Skąd: Białystok

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


Ja robię to za pomocą cookies. Zostawiam dwa: UserName i UserToken. UserName to nazwa użytkownika z tabeli users. Token to hash (sha1) dowolnej liczby z której pobrano uniqueid. Przy starcie strony wczytuje cookies utworzone przy logowaniu i porównuje token z bazy z tokenem cookies dla użytkownika cookies. Jeśli ok i sesja wygasła to tworzę nową o id tez zostawionym w cookies.


--------------------
Go to the top of the page
+Quote Post
tiraeth
post 27.06.2005, 09:38:25
Post #7





Grupa: Przyjaciele php.pl
Postów: 1 789
Pomógł: 41
Dołączył: 30.10.2003
Skąd: Wrocław

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


Teraz przy logowaniu mam ustawione ważność sesji na 72 godziny, ustawiam cookies w taki sposób:

  1. <?php
  2. setcookie('session_sid', SID, time()+3600*72); # identyfikator sesji
  3. setcookie('session_data', serialize($_SESSION), time()+3600*72); # wartosc sesji
  4. ?>


I teraz niestety nie wiem jak uaktywnić sesje o SID=$_COOKIE['session_sid']... wykorzystująć session_id" title="Zobacz w manualu PHP" target="_manual($_COOKIE['session_sid']) a następnie session_start, niestety nie odzyskuję poprzedniej sesji - wywala mi okienko logowanie...
Go to the top of the page
+Quote Post
aleksander
post 27.06.2005, 09:46:05
Post #8





Grupa: Przyjaciele php.pl
Postów: 742
Pomógł: 0
Dołączył: 14.12.2003
Skąd: Gdańsk, Trójmiasto

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


zrób coś w tym stylu:
  1. <?php
  2.  
  3. if( isset( $_COOKIE['sesja'] ) )
  4. {
  5. //istnieje cisteczko
  6. $_SESSION = unserialize( $_COOKIE['sesja'] );
  7. } else {
  8. // nie istnieje ciacho, wywoływanie logowania
  9. }
  10. ?>
a sessionid zostaw w spokoju niech będzie za każdym razem inne. Ważne żebyś zawartość $_SESSION miał taką samą.
Go to the top of the page
+Quote Post
tiraeth
post 27.06.2005, 09:58:03
Post #9





Grupa: Przyjaciele php.pl
Postów: 1 789
Pomógł: 41
Dołączył: 30.10.2003
Skąd: Wrocław

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


Ale każdy będzie mógł sobie wtedy ustawić ciastko sesja gdzie sobie zserializuje jakieś wartości... myślałem aby ustawiał on taki sam SID po sprawdzeniu wartosci sesji....
Go to the top of the page
+Quote Post
NuLL
post 27.06.2005, 09:59:18
Post #10





Grupa: Zarejestrowani
Postów: 2 262
Pomógł: 21
Dołączył: 3.05.2004
Skąd: Sopot, Krakow, W-wa

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


Po kiego grzyba zapisywać w ciastku całość sesji :?:


--------------------
Javascript, Coffeescript, Node.js, Mongo, CouchDb, chmury, workery & inne bajery - zycie jest zbyt krotkie aby miec nudna prace :)
Go to the top of the page
+Quote Post
tiraeth
post 27.06.2005, 11:31:05
Post #11





Grupa: Przyjaciele php.pl
Postów: 1 789
Pomógł: 41
Dołączył: 30.10.2003
Skąd: Wrocław

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


Proszę o pomoc, bo to co napisał aleksander nie działa...

Zaczęło mi się wszystko sypać i po zalogowaniu się i przeniesieniu na site przez header() wyświetla mi pustą stronę :/

Ten post edytował tiraeth 27.06.2005, 11:32:28
Go to the top of the page
+Quote Post
Nievinny
post 27.06.2005, 15:34:55
Post #12





Grupa: Zarejestrowani
Postów: 134
Pomógł: 0
Dołączył: 27.01.2005
Skąd: Białystok

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


Jak masz dane ciach z SIDem to robisz przez session_id, danych nie dajesz do ciacha. Jeżeli nie odzyskujesz id sesji to masz coś z obsługą cookies


--------------------
Go to the top of the page
+Quote Post
tiraeth
post 27.06.2005, 17:27:47
Post #13





Grupa: Przyjaciele php.pl
Postów: 1 789
Pomógł: 41
Dołączył: 30.10.2003
Skąd: Wrocław

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


  1. <?php
  2.  
  3.  $connect = mysql_connect('***', '***', '***') or die(mysql_error());
  4.  mysql_select_db('***', $connect);
  5.  
  6. if($_COOKIE['session_sid'])
  7. {
  8.  session_id($_COOKIE['session_sid']);
  9.  
  10.  echo $_COOKIE['session_id'];
  11. }
  12.  
  13.  
  14. if(!$_SESSION['logged_in'])
  15. {
  16. if(!$_POST['u'] && !$_POST['p'])
  17. {
  18.  echo '<form name=\"log\" action=\"'.$_SERVER['PHP_SELF'].'\" method=\"POST\">';
  19.  echo '<input type=\"text\" name=\"u\">&nbsp;<input type=\"password\" name=\"p\"><br /><input type=\"submit\" value=\"OK\">';
  20.  echo '</form>';
  21. }
  22. else
  23. {
  24.  # loggin in user
  25.  $result = mysql_query(&#092;"SELECT * FROM uzytkownicy WHERE username='\".$_POST['u'].\"' AND user_password='\".md5($_POST['p']).\"' LIMIT 1\")
  26.  or die(mysql_error());
  27.  
  28.  if($result && $row = mysql_fetch_assoc($result))
  29.  {
  30. if($row['username'] == $_POST['u'])
  31. {
  32.  $_SESSION['logged_in'] = 1;
  33.  $_SESSION['user_id'] = $row['user_id'];
  34.  
  35.  setcookie('session_sid', session_id(), time()+180);
  36. }
  37.  }
  38.  
  39.  header(&#092;"Location: \".$_SERVER['PHP_SELF']);
  40. }
  41. }
  42.  
  43. echo 'Zalogowany: '; echo ($_SESSION['logged_in']) ? '<b>tak</b>' : ''; echo '<br />';
  44. echo 'Userid: <b>'.$_SESSION['user_id'].'</b>';
  45. ?>


Przy takim prostym kodzie sesji, bez session_handlera, wszystko działa smile.gif Loguję się... wyłączam przeglądarkę, włączam ponownie i wyświetla, że jestem zalogowany biggrin.gif Zostały mi napisać nowy session_handler, dzięki Wam za pomoc...
Go to the top of the page
+Quote Post
hwao
post 27.06.2005, 21:11:46
Post #14


Developer


Grupa: Moderatorzy
Postów: 2 844
Pomógł: 20
Dołączył: 25.11.2003
Skąd: Olkusz




Co do problemu auto logowania.

Po 1.
Ustaw cookie w sessionh z id tak zeby nie gaslo z zamknieciem przegladarki,
Po 2.
Polecam np zapisac cookie z loginem i haslem ale obie wartosci w md5 a potem sprawdzci czy w bazie takie istnieja
Kod
where md5( poleZloginem ) = $_COOKIE['login'] AND ...
Go to the top of the page
+Quote Post
Coyote
post 27.06.2005, 22:10:57
Post #15





Grupa: Zarejestrowani
Postów: 151
Pomógł: 0
Dołączył: 20.02.2005
Skąd: Poznań

Ostrzeżenie: (30%)
XX---


Hm... sorki za OT ale wie ktos skad mozna sciagnac taka przykladowa klase questionmark.gif
zeby miec jakis wzor co i jak questionmark.gifsmile.gif


--------------------
Go to the top of the page
+Quote Post
bela
post 27.06.2005, 22:32:30
Post #16


Administrator PHPedia.pl


Grupa: Developerzy
Postów: 1 102
Pomógł: 2
Dołączył: 14.09.2003

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


@kojot Chodzi o handler ? Jest artykuł kwiaatka na wortalu


--------------------
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 Wersja Lo-Fi Aktualny czas: 13.08.2025 - 22:49