Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [php] Zmienne sesyjne
polak89
post
Post #1





Grupa: Zarejestrowani
Postów: 20
Pomógł: 0
Dołączył: 11.11.2007

Ostrzeżenie: (10%)
X----


Witam. Napisalem prosty system uwierzytelniania. W pierwszej fazie po zalogowaniu strona do ktorej przesylane sa zmienne z formularza ustawia odpowiedznie zmienne sesyjne. Jeśli wartość zmiennej $_SESSION['logged'] = 1 uzytkownik sie zalogowal:

  1. <?php
  2. $_SESSION['username'] = $_POST['user'];
  3. $_SESSION['userpass'] = $_POST['pass'];
  4. $_SESSION['logged'] = 0;
  5.  
  6. // sprawdza informacje o uzytkowniku
  7.  
  8. if (($_SESSION['username'] == 'login') and
  9. ($_SESSION['userpass'] == 'haslo')) {
  10.  $_SESSION['logged'] = 1;
  11.  }
  12. ?>

Jeśli uzytkownik jest zalogowany na tej stronie zostaja wyswietlone linki edycji i usuwania wiadomosci. Aby usunac lub edytowac rekord z bazy danych uzytkownik musi byc zalogowany:
  1. <?php
  2. case 'delete':
  3.  
  4.  
  5.  if ($_SESSION['logged'] != 1) {
  6.  
  7.  echo 'Nie jestes zalogowany';
  8.  
  9.  exit();
  10.  } else {
  11.  
  12.  $sql = &#092;"DELETE FROM newsletter \" .
  13. &#092;"WHERE news_id=\" . $_GET['id'];
  14.  
  15.  mysql_query($sql, $conn)
  16.  or die ('Nie mogę skasowac artykułu: ' . mysql_error());
  17.  }
  18.  
  19. if( $_SESSION['logged'] == 1) {
  20.  
  21.  redirect('newsletter/wiesci.php');
  22.  }
  23.  break;
  24. ?>

Za pomoca funkcji redirect(); skrypt przekierowuje uzytkownika na strone wynikowa. Niestety w tym przypadku ustawia zmienna $_SESSION['logged'] = 0. Czy ktoś wie jak rozwiazac ten problem?

Ten post edytował polak89 25.11.2007, 12:03:11
Go to the top of the page
+Quote Post
dadexix
post
Post #2





Grupa: Zarejestrowani
Postów: 439
Pomógł: 21
Dołączył: 28.06.2007
Skąd: Bielsko-Biała

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


to co napisałes to jest jeden czy 2 skrypty bo nie wiem..?

po zatym
Kod
$_SESSION['logged] = 1;
nie rozumiem problemu troche źle opisane ale może to to... albo dajesz $_SESSION[] albo $_SESSION['']...

edi:
już wiem w czym jest problem - sesje przypisuje na dany katalog a Twój skrypt do którego przekierowywuje jest w innym katalogu... zaraz coś pomyślimy:P

Ten post edytował dadexix 25.11.2007, 11:58:19
Go to the top of the page
+Quote Post
polak89
post
Post #3





Grupa: Zarejestrowani
Postów: 20
Pomógł: 0
Dołączył: 11.11.2007

Ostrzeżenie: (10%)
X----


To sa 2 skrypty. Chodzi o to ze po przekierowaniu za po moca funkcji redirect() zmienna $_SESSION['logged'] zostaje ustawiona na wartosc 0 a nie na 1.
Go to the top of the page
+Quote Post
no_face
post
Post #4





Grupa: Zarejestrowani
Postów: 346
Pomógł: 23
Dołączył: 28.11.2004

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


Mi sie zas wydaje, ze w pliku wiesci.php nie umiesciles na poczatku skryptu zapisu session_start(), sprawdz.
Go to the top of the page
+Quote Post
polak89
post
Post #5





Grupa: Zarejestrowani
Postów: 20
Pomógł: 0
Dołączył: 11.11.2007

Ostrzeżenie: (10%)
X----


Cytat
Mi sie zas wydaje, ze w pliku wiesci.php nie umiesciles na poczatku skryptu zapisu session_start(), sprawdz.


session_start() zostala ustawiona w kazdym z plikow
Go to the top of the page
+Quote Post
dadexix
post
Post #6





Grupa: Zarejestrowani
Postów: 439
Pomógł: 21
Dołączył: 28.06.2007
Skąd: Bielsko-Biała

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


może byś dał plik wiesc.php?
Go to the top of the page
+Quote Post
polak89
post
Post #7





Grupa: Zarejestrowani
Postów: 20
Pomógł: 0
Dołączył: 11.11.2007

Ostrzeżenie: (10%)
X----


plik wiesci.php

  1. <?php
  2.  
  3. require_once 'conn.php';
  4.  
  5.  
  6.  
  7. $sql = "SELECT * FROM newsletter ORDER BY date DESC";
  8.  
  9. $results = mysql_query($sql, $conn)
  10.  or die (' Nie mogę pobrac newsa: ' . mysql_error());
  11.  
  12. $_SESSION['username'] = $_POST['user'];
  13. $_SESSION['userpass'] = $_POST['pass'];
  14. $_SESSION['sprawdz'] = 0;
  15.  
  16. // sprawdza informacje o uzytkowniku
  17.  
  18. if (($_SESSION['username'] == 'zdrajca-band') and
  19. ($_SESSION['userpass'] == 'zdrajca')) {
  20.  $_SESSION['sprawdz'] = 1;
  21.  }
  22.  
  23.  
  24.  
  25. ?>
  26.  
  27. <!DOCTYPE html
  28. PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
  29. "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
  30.  
  31. <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="pl" lang="pl">
  32.  
  33. <head>
  34.  
  35. <title>ZDRAJCA</title>
  36.  
  37. <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-2" />
  38.  
  39. <link rel="Stylesheet" type="text/css" href="style.css" />
  40.  
  41.  
  42. </head>
  43.  
  44. <body style="background: rgb(0, 0, 0) url(introx/i9.jpg) no-repeat fixed 50%;">
  45.  
  46. <h1>NEWS</h1>
  47.  
  48.  
  49. <?php
  50.  
  51. $arrLocale = array( "pl_PL", "polish_pol" );
  52. setlocale( LC_ALL, $arrLocale );
  53.  
  54.  
  55. if (mysql_num_rows($results)) {
  56.  
  57. echo '<center><a href="compose.php">dodaj</a><a href="transactscript.php?action=wyloguj">wyloguj</a></center>';
  58.  
  59.  
  60. while ($row = mysql_fetch_array($results)) {
  61. echo "<span class=\"date\">" .
  62.  date('j', strtotime($row['date'])) . strftime(' %B %Y', strtotime($row['date'])) .
  63.  "</span>\n";
  64. echo "<p class=\"body\">\n" .
  65.  ucfirst(nl2br($row['body'])) .
  66.  "\n</p>\n";
  67.  
  68. if (isset($_SESSION['sprawdz']) and $_SESSION['sprawdz'] == 1) {
  69.  
  70. echo "<p class=\"action\">\n" .
  71. "<a href=\"compose.php?a=edit&id=" . $row['news_id'] . "\">edytuj</a>\n".
  72. "|\n" .
  73. "<a href=\"transactscript.php?action=delete&id=" . $row['news_id'] . "\">usuń</a>\n</p>\n";
  74.  }
  75.  
  76. }
  77. }
  78. else {
  79. echo "<span style=\"font-family: 'Courier New'; font-style: italic;\">Brak newsów. Aby dodać nowy kliknij <a href=\"compose.php\">tutaj</a>.</span>";
  80. }
  81.  
  82.  
  83. ?>
  84.  
  85. </body>
  86. </html>


Ten post edytował polak89 25.11.2007, 12:29:37
Go to the top of the page
+Quote Post
dadexix
post
Post #8





Grupa: Zarejestrowani
Postów: 439
Pomógł: 21
Dołączył: 28.06.2007
Skąd: Bielsko-Biała

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


powiedz mi coś
Cytat
Chodzi o to ze po przekierowaniu za po moca funkcji redirect() zmienna $_SESSION['logged'] zostaje ustawiona na wartosc 0 a nie na 1.

sprawdzałeś w ogóle? bo w tym skrypcie nigdzie nie używasz ten zmiennej sesyjnej..?

Ten post edytował dadexix 25.11.2007, 12:38:00
Go to the top of the page
+Quote Post
polak89
post
Post #9





Grupa: Zarejestrowani
Postów: 20
Pomógł: 0
Dołączył: 11.11.2007

Ostrzeżenie: (10%)
X----


Cytat
nie rozumiem problemu troche źle opisane


Ludzie!!! Czy wy naprawde nie rozumiecie istoty tego problemu?? Loguje sie poprzez plik login.php... stroną wynikową jest stron wiesci.php ktora otrzymuje zmienne formularza i przypisuje im zmienne sesyjne.
plik wiesci.php:
  1. <?php
  2. $_SESSION['username'] = $_POST['user'];
  3. $_SESSION['userpass'] = $_POST['pass'];
  4. $_SESSION['logged'] = 0;
  5.  
  6. // sprawdza informacje o uzytkowniku
  7.  
  8. if (($_SESSION['username'] == 'login') and
  9. ($_SESSION['userpass'] == 'haslo')) {
  10.  $_SESSION['logged'] = 1;
  11.  }
  12. ?>

a nastepnie sprawdza zawartosc zmiennej $_SESSION['sprawdz']. Jesli zmienna ma wartosc 1 uzytkownik jest zalogowany. Nastepnie strona wiesci.php wyswietla linki edycji i usuwania wiadomosci jesli uzytkownik jest zalogowany:
  1. <?php if (isset($_SESSION['sprawdz']) and $_SESSION['sprawdz'] == 1) {
  2.  
  3. echo "<p class=\"action\">\n" .
  4. "<a href=\"compose.php?a=edit&id=" . $row['news_id'] . "\">edytuj</a>\n".
  5. "|\n" .
  6. "<a href=\"transactscript.php?action=delete&id=" . $row['news_id'] . "\">usuń</a>\n</p>\n";
  7.  }
  8. ?>

Klikajac lacze "usuń" przekazujemy do skryptu transactscript.php zmienna action=delete jesli chcemy usunac wiadomosc. Plik transactscript nie wyswietla zadnej tresci jedynie przekierowuje uzytkownika na strone wynikowa wiesci.php jesli ten jest zalogowany czyli $_SESSION['sprawdz'] = 1.
plik transactcript.php:
  1. <?php
  2. case 'delete':
  3.  
  4.  
  5.  if ($_SESSION['sprawdz'] != 1) {
  6.  
  7.  echo 'Nie jestes zalogowany';
  8.  
  9.  exit();
  10.  } else {
  11.  
  12.  $_SESSION['sprawdz'] = 1;
  13.  
  14.  $sql = "DELETE FROM newsletter " .
  15. "WHERE news_id=" . $_GET['id'];
  16.  
  17.  mysql_query($sql, $conn)
  18.  or die ('Nie mogę skasowac artykułu: ' . mysql_error());
  19.  }
  20.  
  21. if( $_SESSION['sprawdz'] == 1) {
  22.  
  23.  redirect('newsletter/wiesci.php');
  24.  }
  25.  break;
  26.  
  27. ?>

Problem pojawia sie w momencie przekierowania na strone wiesci.php ktora powinna zawierac zmienna sesyjna $_SESSION['sprawdz']=1 aby moc ponownie wyswietlic łącza "usuń" i "edytuj". ŁĄcza natomiat NIE SĄ wyświetlane a zmienna sesyjna$_SESSION['sprawdz'] zwraca wartosc 0... kazdy plik w swojej gornej czesci zawiera funkcje session_start wiec nie wmawiajcie mi ze jej nie ma (IMG:http://forum.php.pl/style_emoticons/default/snitch.gif) wiec moje pytanie jest nastepujace: dlaczego plik wiesci.php "gubi" zmienne sesyjne?a moze problem tkwi w pliku transactscript? prosciej nie potrafie...

hey...ludzie! zyjecie? jest tos mi w stanie pomoc?

Ten post edytował polak89 25.11.2007, 14:45:53
Go to the top of the page
+Quote Post
no_face
post
Post #10





Grupa: Zarejestrowani
Postów: 346
Pomógł: 23
Dołączył: 28.11.2004

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


Dlatego, ze po przeladowaniu nie masz juz zmiennych POST, przez co:
  1. <?php
  2. $_SESSION['username'] = $_POST['user'];
  3. $_SESSION['userpass'] = $_POST['pass'];
  4. $_SESSION['sprawdz'] = 0;
  5. ?>

zmienne sesyjne maja false, dalej
  1. <?php
  2. if (($_SESSION['username'] == 'zdrajca-band') and
  3. ($_SESSION['userpass'] == 'zdrajca')) {
  4.  $_SESSION['sprawdz'] = 1;
  5.  }
  6. ?>

nie przypisuje zmiennej sprawdz 1
Go to the top of the page
+Quote Post
polak89
post
Post #11





Grupa: Zarejestrowani
Postów: 20
Pomógł: 0
Dołączył: 11.11.2007

Ostrzeżenie: (10%)
X----


Cytat
Dlatego, ze po przeladowaniu nie masz juz zmiennych POST

wiec jak moge poprawic powyzszy kod?
Go to the top of the page
+Quote Post
no_face
post
Post #12





Grupa: Zarejestrowani
Postów: 346
Pomógł: 23
Dołączył: 28.11.2004

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


Nie przerabiajac struktury Twojego skryptu zamien:

  1. <?php
  2. $_SESSION['username'] = $_POST['user'];
  3. $_SESSION['userpass'] = $_POST['pass'];
  4. ?>

na
  1. <?php
  2. if (isset($_POST['user']) && isset($_POST['pass']))
  3. {
  4.  $_SESSION['username'] = $_POST['user'];
  5.  $_SESSION['userpass'] = $_POST['pass'];
  6. }
  7. ?>
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 - 19:14