Na początek kod.
  1. <?php
  2. if ($_POST)
  3. {
  4.  $_SESSION['zmienna'] = $_POST['input'];
  5.  header('Location: index.php');
  6. }
  7. print_r($_POST);
  8. print_r($_SESSION);
  9. unset($_SESSION['zmienna']);
  10. print_r($_SESSION);
  11. ?>
  12. <form method="post">
  13. <input type="text" name="input">
  14. <input type="submit">
  15. </form>

wynik to 3 puste tablice, to jest:
Kod
array(0) { } array(0) { } array(0) { }

Logika skryptu ma być taka. Jeśli jest $_POST, to znaczy że były przesyłane dane. Są mi one potrzebne (chcę wiedzieć nie tylko, że ktoś coś wpisał w polu tekstowym, ale także, co wpisał). A jak zastosuję Redirect After Post (jest to konieczne w moim skrypcie), czyli wyślę ten nagłówek, to $_POST jest już nieczytelne. Dlatego przed tym zamieniam to sobie na sesje i jest ok. W zmiennej sesji mam to, co ktoś wpisał w polu. No i zaczynają się schody. Następnie zachodzi konieczność wyświetlenia zmiennej sesji, a następnie unieważnienia jej, żeby przy odświeżeniu strony zmienna już nie istniała. I wszystko by działało, gdyby nie to, że jak unieważniam zmienną sesji, to w całym skrypcie. I nad wierszem unset($_SESSION['zmienna'], i pod nim. Według mojej logiki wynikiem powinno być:
Kod
array(0) { } array(1) { ["zmienna"] => string(5) "tekst"} array(0) { }

Ale tak niestety nie jest.
Jeśli nie operuję na zmiennych sesji, tylko na dowolnych innych, to wszystko jest ok - zmienna jest niewidoczna dopiero po wykonaniu unset(), natomiast przed normalnie ma wartość.
Może tablica $_SESSION ma jakieś specjalne właściwości i jej elementy należy kasować w inny sposób? sad.gif

edit: oczywiście, da się w prosty sposób tongue.gif
  1. <?php
  2. if ($_POST)
  3. {
  4.  $_SESSION['zmienna'] = $_POST['input'];
  5.  header('Location: index.php');
  6.  exit;
  7. }
  8. ?>


Ponieważ kod po nagłówku wykonuje się dalej, i unieważnia zmienną sesji niepotrzebnie...