[php] Ciasteczka / Cookies

0

Mam problem. Mam 3 funckje:

Funkcja sprawdzająca czy admin jest zalogowany:

function AdminLoggedIn()
{
  $Cookie = $_COOKIE["Admin"];
  if($Cookie=="Zalogowany")
    {
      return true;
    }
  else
    {
      return false;
    }
}

Funkcja ustawiająca ciastko (status admina) na "Zalogowany":

function AdminLogin()
{
  setcookie("Admin","Zalogowany");
}

Funkcja ustawiająca ciastko (status admina) na "Nie Zalogowany":

function AdminLogout()
{
  setcookie("Admin","Nie zalogowany");
}

(Chyba funkcje są dobrze napisane, jak nie - proszę mnie poprawić)

Na stronie dałem formularz z nazwą użytkownika i hasłem odnoszący się do tej samej strony (index.php3). Na początku pliku index.php3 sprawdzane są w/w parametry i wywoływane są funkcje AdminLogin lub AdminLogout (w zależności co nacisnąłem w formularzu czy logIN czy logOUT). Na tej samej stronie (tylko gdzieś pod koniec) jest sprawdzanie warunku czy admin jest zalogowany (czyli czy ciacho jest ustawione na "Zalogowany") i: jeśli tak to pojawia się link do innej strony; jeśli nie jest zalogowany nie pojawia się link. Teoretycznie jest OK, ale praktycznie nie. Ciastko nie jest ustawiane, lub jeśli jest to funkcja AdminLoggedIn zawsze zwraca wartość false (nawet po wywołaniu funkcji AdminLogin). Dlaczego?

Ciasteczka w przeglądarce mam włączone.
Jaka może być przyczyna tego problemu?
Thx za pomoc.

//prefixy... - m.M

0

Moze spróbuj $HTTP_COOKIE_VARS zamiast $_COOKIE

0

Tablica $HTTP_COOKIE_VARS też nie działa, choć funkcja AdminLogin jest wykonywana (nie wiem czy Cookie jest ustawiane)

0

pomijajac fakt, ze nie funkcjonuje. czy jestes pewny ze wybrales wlasciwy przyzad. dla zapamietania danych, ktore sa deczko krytyczne, nie uzywalbym cookies, tylko session variable na serwerze. w ten sposob mozesz wykluczyc, ze ktos manipuluje / kombinuje.

pozdrowienia
janusz

0

pomijajac fakt, ze nie funkcjonuje. czy jestes pewny ze wybrales wlasciwy przyzad. dla zapamietania danych, ktore sa deczko krytyczne, nie uzywalbym cookies, tylko session variable na serwerze. w ten sposob mozesz wykluczyc, ze ktos manipuluje / kombinuje.

pozdrowienia
janusz

Mógłbyś dać jakiś przykład założenia zmiennej w sesji. Dzięki.

0

Wydaje mi sie iż funkcja pierwsza może nie chocić dlatego, ze zmienne cookie nie są przakazywane. Należy albo na początku funkcji dać

global $_cookie

, albo prze atrybuty w funkcji.

Co do sesji to:

session_start();
session_register("nazwazmiennej");
// cos tam :);

// uwuwamy zmienna i konczymy sesje;
session_unregister("nazwa zmiennej");
session_destroy();
0

(Moje procedurki po przetworzeniu)

$AdminReg = "Admin zalogowany";

function AdminLoggedIn()
{
  global $AdminReg;

  if (session_is_registered($AdminReg))
    {
      return true;
    }
  else
    {
      return false;
    }
}

function AdminLogin()
{
  global $AdminReg;

  session_register($AdminReg);
}

function AdminLogout()
{
  global $AdminReg;

  session_unregister($AdminReg);
}

funkcje

session_register
session_unregister 

działają, ale gdy są w różnych funkcjach (AminLogin, AdminLogout) to nie. Jak dać je do globalnego dostępu? Jak daje:

global session_register("adminloggedin"); 

to jest błąd. (expected T_VARIABLE not T_STRING czy jakoś tam, bo zwracany jest tekst a nie zmienna).

Natomiast jeżeli zrobię tak:

function AdminLoggedIn()
{
  global $AdminReg;
  AdminLogin(); /*jeżeli tutaj rejestruję zmianną sesyjną, to w warunku poniżej jest ta zmienna ustawiona i funkcja=true, jeżeli nie ma powyższej funkcji AdminLogin to funkcja=false, bo zmienna nie jest widoczna w funkcji AdminLoggedIn a tylko w AdminLogin*/
  if (session_is_registered($AdminReg))
    {
      return true;
    }
  else
    {
      return false;
    }
}

to wszystko gra. Jak zrobić by ta zmienna sesyjna była dostępna dla wszystkich funkcji ?

P.S. Przy załadowaniu jakiejkolwiek podstrony zmienia mi się ID sesji (PHPSESSID), czy tak powinno być, czy nie ?

1 użytkowników online, w tym zalogowanych: 0, gości: 1