Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Skrypt logowania Session,Cookis, prośbą o analizę...
Avatarus
post
Post #1





Grupa: Zarejestrowani
Postów: 304
Pomógł: 0
Dołączył: 12.12.2006
Skąd: Pszów

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


Witam
Próbuje napisać sprawny kod logowania z cookies opartym oczywiście o sesje i bazę danych mysql.
Jednak coś nie działa mi to w necie, bo lokalnie zdaję się że działa.

Mam jeszcze dodatkowe pytanie, czy da się jakoś sztucznie wydłużyć czas trwania SESSION? Typ serwera Home.pl, konto współdzielone, więc nie mam dostępu do php.ini

Oto zestaw plików odpowiedzialnych za logowanie u mnie.

Plik funkcje.php
  1. <?php
  2. require_once 'sterownik.php'; //cache
  3. $host='localhost';
  4. $user='xxxxxx';
  5. $haslo='xxxxxx';
  6. $baza='xxxxx';
  7.  
  8.  
  9. //LOGOWANIE 
  10. //logowanie_cookies();
  11.  
  12.  
  13. function polaczenie()
  14. {
  15. global $host,$user,$haslo,$baza;
  16. $lacz=mysql_connect($host,$user,$haslo);
  17. $polecenie=mysql_query($lacz);
  18. $baza_danych=mysql_select_db($baza);
  19. $polecenie=mysql_query($baza_danych);
  20. }
  21. function wczytaj_ustawienia()
  22. {
  23. polaczenie();
  24.  $zapytanie=mysql_query('Select * from scms_ustawienia');
  25.  $ustawienia=mysql_fetch_assoc($zapytanie);
  26.  return $ustawienia;
  27. }
  28. function generuj_id_sesji()
  29. {
  30. $id_sesji=rand(0,20).sha1(date('U')).rand(0,50);
  31. return $id_sesji;
  32. }
  33. function logowanie_cookies()
  34. {
  35. //echo 'Logowanie cookies<br>';
  36. if (!empty($_COOKIE['tajnecookie']))
  37. {
  38. //echo 'jest cookies<br>';
  39. $id_sesji=$_COOKIE['tajnecookie'];
  40. $test_session=sprawdz_sesje($id_sesji);
  41.  
  42. }
  43. else
  44. {
  45. //echo '<br>nie ma cookies<br>';
  46. }
  47.  
  48. }
  49. function sprawdz_sesje($id)
  50. {
  51. //echo '<br>sprawdzanie cookies<br>';
  52. polaczenie();
  53. $zapytanie = "select * from scms_sesje where session_id='".$id."'";
  54. //echo $zapytanie;
  55. $wynik = mysql_query($zapytanie);
  56. $dane=mysql_fetch_assoc($wynik);
  57. //echo "<br>Strona:".$_SERVER[HTTP_USER_AGENT].'<br>Baza:'.$dane['browser'].'<br>';
  58. if(mysql_num_rows($wynik)!=0 and ($_SERVER[HTTP_USER_AGENT]==$dane[agent]))
  59. {
  60. //echo '<br>Sesja z bazy:'.$dane[session_id].'<br>';
  61. //echo '<br>Jest taka sesja w bazie<br>';
  62. $_SESSION['uwierzytelniony'] = $dane['login'];
  63. $_SESSION['user_poziom']=$dane['user_level'];
  64. $_SESSION['id']=$dane['user_id'];
  65. return $dane;
  66. }
  67. else
  68. {
  69.  //echo '<br>Nie ma takiej sesji w bazie<br>';
  70.  return 0;
  71. }
  72. }
  73. function czyszczenie_tabeli_sesji()
  74. {
  75. if (date('H')==23 and date('i')>45)
  76. {
  77. $czas=date(U)-(60*60*24*30);
  78. $sql='DELETE from scms_sesje where czas<"'.$czas.'"';
  79. }
  80. }
  81. ?>


plik index.php
  1. <?php
  2. require 'funkcje.php';
  3.  
  4. polaczenie();
  5. $ustawienia=wczytaj_ustawienia();
  6.  
  7. if ($ustawienia[status]=="OFF") 
  8. {
  9. require ('strona_off.php'); exit;
  10. }
  11.  
  12. else
  13. {
  14. if (!$_SESSION['uwierzytelniony'] and !$_SESSION['user_poziom'] and !$_SESSION['id']) logowanie_cookies();
  15. header ('Location: news.php');
  16.  
  17. }
  18. ?>

Plik logout.php
  1. <?php
  2. require 'funkcje.php';
  3. function wyloguj($id)
  4. {
  5.  
  6. polaczenie();
  7. $zapytanie = mysql_query("delete from scms_sesje where session_id='".$id."'");
  8. unset($_SESSION['uwierzytelniony']);
  9. unset($_SESSION['user_poziom']);
  10. unset($_SESSION['id']);
  11. setcookie('tajnecookie','',time()-100,'','',0);
  12. header ('Location: index.php');
  13. }
  14. wyloguj($_COOKIE['tajnecookie']);
  15. ?>

Plik logowanie.php
  1. <?php
  2. if(isset($_POST['login']) and isset($_POST['haslo']))
  3. {
  4. $iduzytkownika = $_POST['login'];
  5. require_once ('funkcje.php');
  6. polaczenie();
  7. $zapytanie = "select ID_MEMBER,memberName,ID_GROUP,passwd,emailAddress from 
  8. smf_members where memberName='".$iduzytkownika."' and passwd='".sha1(strtolower($iduzytkownika).$_POST[haslo])."'";
  9. $wynik = mysql_query($zapytanie);
  10. $dane=mysql_fetch_assoc($wynik);
  11. $jest_user=mysql_num_rows($wynik);
  12. if($jest_user > 0)
  13. {
  14. $polecenie=mysql_query('SELECT name from smf_ban_groups where name="'.$dane[memberName].'"');
  15. $warnow=mysql_fetch_array($polecenie);
  16. if (mysql_num_rows($polecenie)>0)
  17. {
  18. unset($_SESSION['uwierzytelniony']);
  19. unset($_SESSION['user_poziom']);
  20. unset($_SESSION['id']);
  21. header ('Location: ban.php');
  22. }
  23. else
  24. {
  25.  $_SESSION['uwierzytelniony'] = $dane[memberName];
  26. $_SESSION['user_poziom']=$dane['ID_GROUP'];
  27. $_SESSION['id']=$dane['ID_MEMBER'];
  28. $wygenerowane_id=generuj_id_sesji();
  29. $sql=mysql_query('DELETE from scms_sesje where login="'.$_SESSION[uwierzytelniony].'"');
  30. $sql=mysql_query('Insert Into scms_sesje values (NULL,''.$wygenerowane_id.'',''.$dane[memberName].'',''
  31. .$dane['ID_MEMBER'].'',''.$dane['ID_GROUP'].'',''.$_SERVER[HTTP_USER_AGENT].'',''.date(U).'')');
  32. setcookie('tajnecookie',$wygenerowane_id,time()+60*60*24*30,'','',0);
  33. czyszczenie_tabeli_sesji();
  34.  
  35. header ('Location: index.php');
  36.  
  37. }
  38. }
  39. else
  40. {
  41. header ('Location: news.php');
  42. }
  43. }
  44. else header ('Location: news.php');
  45. ?>


w nagłówku zaraz po body jest wywołanie funkcji:
  1. <?php
  2. if (!isset($_SESSION[uwierzytelniony])) logowanie_cookies();
  3. ?>


Skrypt pisałem jakiś czas temu, mam świadomość że jest trochę chaotyczny (IMG:http://forum.php.pl/style_emoticons/default/smile.gif) Jeśli jednak macie jakieś pomysły jak temu zaradzić. Nie trzeba tu nigdzie przypadkiem zregenerować id sesji? Tylko jak i gdzie? Będę wdzięczny za pomoc.
Pozdrawiam

Ten post edytował Avatarus 22.06.2008, 06:34:01
Go to the top of the page
+Quote Post

Posty w temacie


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: 23.08.2025 - 14:41