Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP] Gubienie sesji
Forum PHP.pl > Forum > Przedszkole
potreb
Witam. Mam prosty kodzik:

  1. <?php
  2.  
  3. function redirect($location = _self) {
  4.  
  5. header('location: '.$location);
  6. }
  7.  
  8. function setInfo($mess, $type = 1)
  9. {
  10. $_SESSION['error'] = $mess;
  11. }
  12.  
  13.  
  14. function getInfo($val = '')
  15. {
  16. if( isset($_SESSION['error']) ) $val = $_SESSION['error'];
  17.  
  18. if(isset($val))
  19. {
  20. unset($_SESSION['error']);
  21. return $val;
  22. }
  23. }
  24.  
  25. if(isset($_GET['deleteFile'])) {
  26. setInfo("Zatwierdzono");
  27. redirect('fbrowser.php');
  28. die();
  29. }
  30. ?>
  31.  
  32. <?php if(isset($_SESSION['error'])) { ?>
  33. <?=getInfo()?>
  34. <?php } ?>
  35.  
  36. <a href="fbrowser.php?deleteFile">Nacisnij</a>


Po kliknieciu w nacisnij ma niby kasowac plik, a po skasowaniu pokac komunikat zatwierdzono. Wszystko działa, ale dlaczego jedynie wtedy gdy jest die() pod funkcji redirect? Nie wiem czemu lae ten mechanizm mi działa normalnie w panelu administratora, a dla browsera za cholere nie.
AlexDeLarge
Bo ponieważ, proszę ja Ciebie, po redirect'cie wykonywanym za pomocą nagłówka HTTP (status 301) nie może już być nic, a Ty wyświetlasz jeszcze linka. Zamień die() na exit(), jakoś tak poprawniej (die sugeruje, że wystąpił błąd).
nospor
Cytat
Bo ponieważ, proszę ja Ciebie, po redirect'cie wykonywanym za pomocą nagłówka HTTP (status 301) nie może już być nic, a Ty wyświetlasz jeszcze linka
Bo proszę ja Ciebie w błędzie jesteś. Po header mogą iść rzeczy. To przed header nie mogą.

@potreb no naprawdę nie widzisz błędu? Jak nie dajesz die() to skrypt idzie dalej. A co dalej masz? A no to:
<?php if(isset($_SESSION['error'])) { ?>
<?=getInfo()?>
<?php } ?>

A ten kod niszczy komunikat w sesji, który ty co dopiero ustawiłeś, więc po redirect strona nie ma ci już nic do wyświetlenia.
Tak czy siak, czy dalej byś miał ten kod czy nie, to raczej naturalną rzeczą jest, że po redirect należy kończyć skrypt poprzez die czy exit, bo wykonywanie daleszego kodu po redirect nie ma raczej sensu.
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.