coś tam sobie amatorsko tworzę i natrafiłem na problem, kiedy to skrypt samoczynnie wylogowuje mnie z aktywnej sesji w momencie próby zmiany nazwy innego usera, na taką, z jakiej korzysta obecny user.
Może przedstawię kod:
{ $submit = $_POST['submit']; $save = "Save"; $delete = "Delete"; $name = $_POST['user']; $haslo = $_POST['haslo']; $ip = $_POST['ip']; $data = $_POST['data']; $czas = $_POST['czas']; $id = $_GET['id']; if ($submit == $save) { //kodowanie hasła if ($istnick2[0] == 1) { } else { mysql_query("UPDATE `admins` SET nick='$name', haslo='$haslo', ip='$ip', data='$data', czas='$czas' WHERE id='$id'"); $status = "password_changed"; mysql_query("INSERT INTO logs (`user`, `status`, `ip`, `data`, `time`) VALUES ('$name', '$status', '" . $_SERVER['REMOTE_ADDR'] . "', '" . date('d-m-Y') . "', '" . date('H:i:s') . "')"); $_SESSION['haslo'] = $haslo; $_SESSION['nick'] = $name; } } elseif ($submit == $delete) { //kasowanie admina } }
Jak widać w liniach 18-21 w wypadku stwierdzenia, że nick jest zajęty, skrypt ma zwrócic tylko komunikat. Dalsza część instrukcji nie wykonuje się więc nie powinno dochodzić do nadpisywania sesji.
Tak wyglądają pierwsze linijki kodu odpowiedzialne za sprawdzenie sesji:
$nickSesja = $_SESSION['nick']; $hasloSesja = $_SESSION['haslo']; { echo '<br />Nie byłeś zalogowany albo zostałeś wylogowany<br /><a href="index.php">Strona Główna</a><br />'; exit; } $user = mysql_fetch_array(mysql_query("SELECT * FROM admins WHERE `nick`='$nickSesja' AND `haslo`='$hasloSesja' LIMIT 1")); { exit; }
Wartości dla sesji są też nadawane w pliku logowanie, ale to chyba nie istotne.
Więc sytuacja wygląda tak, że gdy chcę zmienić nick userowi na taki jaki mam obecnie ja - zalogowany (załóżmy userowi Marek zmieniam nick na mój - np. Andrzej) to skrypt po sprawdzeniu, że taki nick istnieje zgodnie z instrukcją warunkową wyświetla stosowną informację i na tym się kończy.
Gdy jednak kliknę w którąkolwiek dostępną opcję po otrzymaniu tego komunikatu (np. opcję wyświetlenie adminów, logów, itp.) dostaję komunikat, że jestem nieprawidłowo zalogowany (linijki 12-17 drugiego kodu). Nie ma takiego problemu, jeśli próbuję zmienić nickname na jakiś dostępny.
Dodam, że nie jestem autorem kodu na logowanie z sesjami, więc jeśli ma on jakieś rażące błędy prosiłbym o wskazanie mi ich.