Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [php] sesje+wielu użytkowników
Forum PHP.pl > Forum > Przedszkole
domel23
Witam.

Mam taki problem, mianowicie jak jest zalogowany tylko jeden użytkownik to wszystko działa ok, ale jak jest zalogowanych paru użytkowników i jeden z nich się wyloguje to sesja jest niszczona dla wszystkich i tracą oni dostęp do danych dostępnych po zalogowaniu. Gdy jeden użytkownik zrobi cokolwiek na stronie po zalogowaniu to wszystkich przelogowuje na tego użytkownika i lipa :-( Jak to poprawić?

logowanie.php
  1. <?php
  2. $log = $_POST['login'];
  3. $pass = $_POST['pass'];
  4. $ktotam=$_POST['kto'];
  5.  
  6. if ($ktotam == 'K')
  7. {
  8.  
  9. include("images/dbklient.dat");
  10. if(!$db){
  11. ?>
  12. <script language="javascript">
  13. <!--
  14. alert("Przepraszamy ale serwer jeste aktualnie zajety, prosze sprobowac za chwile"); 
  15. location.href = 'loguj.php';
  16. //-->
  17. </script>
  18. <?php
  19. }
  20. else{
  21. //-----------------------------------------------------------------------------------------
  22. $query = "SELECT * FROM karty WHERE id_klienta = '$log' AND haslo = '$pass'";
  23. $res = pg_query($db, $query) or die(pg_errormessage());
  24. $wierilo = pg_num_rows($res);
  25. if ($wierilo == 1) {
  26. $_SESSION['log']="$log";
  27. header("Location: klient.php");
  28. exit();
  29. }
  30. else {
  31. pg_close($db);
  32. ?>
  33. <script language="javascript">
  34. <!--
  35. alert("Bledny login lub haslo, ponow probe"); 
  36. location.href = 'loguj.php';
  37. //-->
  38. </script>
  39. <?php
  40. }
  41. }
  42. }
  43. else if($ktotam == 'S')
  44. {
  45. include("images/dbfirma.dat");
  46. if(!$db){
  47. ?>
  48. <script language="javascript">
  49. <!--
  50. alert("Przepraszamy ale serwer jeste aktualnie zajety, prosze sprobowac za chwile"); 
  51. location.href = 'loguj.php';
  52. //-->
  53. </script>
  54. <?php
  55. }
  56. else{
  57. //-----------------------------------------------------------------------------------------
  58. $query = "SELECT * FROM sprzedawcy WHERE id_sprzedawcy = '$log' AND haslo = '$pass'";
  59. $res = pg_query($db, $query) or die(pg_errormessage());
  60. $wierilo = pg_num_rows($res);
  61. if ($wierilo == 1) {
  62. $_SESSION['log']="$log";
  63. header("Location: sprzedawca.php");
  64. exit();
  65. }
  66. else {
  67. pg_close($db);
  68. ?>
  69. <script language="javascript">
  70. <!--
  71. alert("Bledny login lub haslo, ponow probe"); 
  72. location.href = 'loguj.php';
  73. //-->
  74. </script>
  75. <?php
  76. }
  77. }
  78.  
  79. }
  80. else{
  81. ?>
  82. <script language="javascript">
  83. <!--
  84. alert("Wybierz rodzaj logowania"); 
  85. location.href = 'loguj.php';
  86. //-->
  87. </script>
  88. <?php
  89. }
  90. ?>


out.php
  1. <?php 
  2. //session_start(); 
  3. $_SESSION = array (); 
  4. if (isset($_COOKIE[session_name()])) { 
  5.  setcookie(session_name(), '', time()-36000, '/'); 
  6. } 
  7. header("Location: index.php"); 
  8.  ?>


Więc nadal się z tym morduje, przeszukałem już chyba całe forum, różne porady i nic exclamation.gif Proszę pomóżcie
styx
a testowałeś to na jednym kompie?
domel23
Mam ten skrypt nan dwóch kompach i nie działa.
gebp
daj na samym początku (przed wszystkimi innym)
  1. <?php
  2. ?>
misiek172
$_SESSION = array ();

czyżby ta linijka nie jest problemen twoich cudów?

w tym momencie niszczysz cała tablice sesji wszystkich użytkowników!!
domel23
Niestety nadal to samo sad.gif
misiek172
wogóle plik OUT jest bezensowny,

ponieważ wystarczy samo polecenie session_destroy();

i oczywiśice przelogowanie.
domel23
Co masz na myśli pisząc przelogowanie?
misiek172
chodziło mi o ten Location tongue.gif

chciałem powiedziedź odświeżenie, niewiem czemu użyłem słowa przelogowanie ;P
domel23
A teraz zagadaka biggrin.gif

Mianowicie jak zaloguje dwuch lub więcej użytkowników na używając jednej przeglądarki na. Opera na osobnych kartach to lipa.

Natomiast jak zaloguje każdego użytkownika pod inną przeglądarka to wszystko jest OK. Każdy działa na swoich podstronach i nie ma efektu "przelogowania" na innych użytkowników i wylogowanie tez jest OK.

Czy to jest normalne zjawisko? tongue.gif
misiek172
oczywiście, w twoim przypadku ID sesji przekazywany jest w COOKIE

,a każda przeglądarka tworzy plik cookie do danej strony (chyba ze zdefiniujesz tworzenie innego, lecz w tym przypadku jest jeden).

no i co za tym idzie używając tej samej przeglądarki na TYM SAMYM komputerze bedzie się nadpisywał numer sesji. Ale na róznych komputerach bedzie dobrze smile.gif
domel23
Czyli wszystko jest OK biggrin.gif Kamień spadł mi z serca dzieki misiek172.

A mam jeszcze takie jedno pytanie. Mianowicie czy jak w pliku out.php mam ustawiony czas ważności sesji to czy automatyczne niszczenie sesji zadziała jeśli nie przejdę na tą strone out.php?

Zamieszczam lekko poprawiony plik out.php jeśli ktoś chciałby skorzystać

  1. <?php 
  2. //$_SESSION = array (); 
  3. if (isset($_COOKIE[session_name()])) { 
  4.  setcookie(session_name(), '', time()-9000, '/'); 
  5. } 
  6. header("Location: index.php"); 
  7.  ?>
misiek172
czas sesji sie definiuje przy jej tworzeniu a nie niszczeniu, ponieważ byłoby ironicznym zniszczyć kogoś i dać mu czas ważności biggrin.gif

to tak jak kara śmierci z grzywną haha.gif
domel23
dobre porównanie biggrin.gif

czyli przy tworzeniu sesji, a czy tylko przy pierwszym wywołaniu session_start(); czy za każdym razem na każdej podstronie?

jeszcze raz plik out.php już bardziej okrojony

  1. <?php 
  2. header("Location: index.php"); 
  3.  ?>
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.