[PHP] Odświeżanie a zmienna sesyjna i dlaczego IE jest marne

0

Witam, mam nadzieję, że znajdzie się ktoś kto powie mi co jest nie tak z moim skryptem. Stowrzyłem aplikację, która pozwala wprowadzać różne głupoty do bazy danych. Uwierzytelnianie userów przy pomocy zmiennej sesyjnej. Moje pytanie brzmi dlaczego kiedy wrzuciłem skrypt na serwer, po zalogowaniu się do aplikacji i odświeżeniu jej jestem automatycznie wylogowywany?? ;( na lokalnym serwie działa wszystko bez zarzutów oczywiście :)

Pytanie 2: czy wiecie może jak należy zoptymalizować kod skrytpu aby kiedy włączam go w IE (włączam przez subdomene) nie wywalał się?

Pozdrawiam

0

postaw sie na miejscu osoby trzeciej, przeczytaj swoj post i sprawdz, ile uda ci sie z niego zrozumiec

0

Na pewno masz sesję rozpoczętą przez session_start()?

0

Tak, tylko program wykonuje się w taki sposób.

  1. Sprawdzenie - login, haslo

  2. przekierowanie do odpowiedniego pliku dla odpowiedniego statusu użytkownika (np. administrator, i zwykły user)
    w tym pliku natępuje session_register i rejestracja zmiennych sesyjnych z pierwszego pliku

0

W ogóle po cholerę session_register? Po co utrudniać sobie życie?

$_SESSION['foo'] = '123';

i tyle.

I pamiętaj że session_start() musi być w KAŻDYM pliku gdzie tego używasz.

0

Wyobraź sobie, że właśnie bez session_register musi być bo próbowałem. Niestety po odświeżeniu mimo dodania session_start do każdego pliku nie działa. Może źle go dodaje. require('nazwapliku.php')?

0

Sprawdź co Ci zwraca var_dump($_SESSION) i czy var_dump(session_id()) zwraca ten sam ID po każdym odświeżeniu strony.

w tym pliku natępuje session_register
...
Wyobraź sobie, że właśnie bez session_register musi być bo próbowałem.

???

0

Funkcja session_register ma status deprecated, a na dodatek w php 6 zostanie usunięta, co oznacza, że nie należy jej używać.

Co do problemu: session_start dajesz na początku pliku, przed jakimkolwiek sprawdzaniem, przypisywaniem zmiennych sesyjnych ? A najlepiej to pokaż kod ;)

0
<?
session_start();
//kod kod kod
if($wprowadzone_haslo == $poprawne_haslo && $wprowadzony_login == $poprawny_login)
{
 $_SESSION['zalogowany'] = true;
 echo 'Zostałeś zalogowany!';
}
else
{
 //tutaj formularz logowania
}
?>
<?
//panel po zalogowaniu
session_start();
//kod kod kod
if($_SESSION['zalogowany'] == true)
{
  echo 'Tajna strona';
}
else
{
 echo 'Brak dostepu!';
}
?>
0

Wygląda to tak. W takim razie usuwam session_register :) dzięki za info.

if (isset($_POST["log"]))
{
    $login = $_POST["login"];
    $password = $_POST["password"];
    $_SESSION["status"] = $conn->logIn($login, $password);
    if (!empty($_SESSION["status"]))
    {
        $_SESSION["login"] = $_POST["login"];
        if ($_SESSION["status"]=="Kroliczek")
        {
            require "plik1.php";
        }
        else if ($_SESSION["status"]=="Kokodzambo")
        {
            require "plik2.php";
        }
        elseif ($_SESSION["status"] == "Miko")
        {
            require "plik3.php";
        }
    }
    else
    {
        $zlylogin = "ZLY LOGIN";
        unset($_SESSION["status"]);
        unset($_SESSION["login"]);
        $smarty->assign('zly_login', $zlylogin);
        $smarty->display('index.tpl');
    }
}
    
elseif (isset($_POST["logout"]))
{
    unset($_SESSION["status"]);
    unset($_SESSION["login"]);
    $smarty->assign('zly_login','Wylogowałeś się');
    $smarty->display('index.tpl');
}
else
{
    $smarty->display('index.tpl');
}

Niestety, rady nie przyniosly skutku. Czy może to wynikać, że wchodzę na stronę przez subdomene, która wskazuje tylko na wybrany folder na serwerze? Bo nie dawno się dowiedziałem, że jest to powód nie działania tej strony pod IE.

Tak, jest to wina przekierowania na subdomene. Macie jakiś pomysł jak to obejśc?

0
ini_set('session.cookie_domain', '.twoja.glowna.domena'); 
0

Hmm.. a jeśli subdomena wskazuje na wybrany folder? Bo załączenie tego kodu nic nie pomogło.

0

to nie ma znaczenia. ciasto sesyjne musi być ustawione na całą domenę, tak masz na przykład na planeta.fm: po zalogowaniu z którejkolwiek subdomeny, np. bielsko.planeta.fm, ciacho jest ustawiane na .planeta.fm i jest bez problemu odczytywane zarówno przez planeta.fm, jak i przez katowice.planeta.fm.

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