Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [php] Dziwny problem z własnym mechanizmem sesji.
MajareQ
post 13.01.2008, 17:13:49
Post #1





Grupa: Zarejestrowani
Postów: 382
Pomógł: 22
Dołączył: 21.05.2007
Skąd: Elbląg

Ostrzeżenie: (0%)
-----


Najpierw może opis skryptu.
Skrypt ma za zadanie utworzyć nową sesję i w tej sesji może dowolnie zmieniać treść z bazy danych.
Taki mini panel admina.
Wykorzystuję AdoDB.
Mam tabelkę, w której utorzyłem m.in pole 'online'
Są dwie możliwości w online - Y albo N

plik systemy.php (do którego odnosi się plik cos.tpl, implantowany w każdym innym pliku)
wyszukuje wszystie rekordy z tabeli
tworzy nową sesję
nadaje danym sesyjnym wartośc danych wpisanych w POST
sprawdza czy dane sesyjne równają się danym z tabeli
jesli tak to tworzy nowe dane sesyjne z wartością prawidłowych danych
i zmienia status online na Y gdzie login i hasło równaja sie danym sesyjnym (prawidłowymi)

potem plik cos.tpl
sprawdza czy user z danych sesyjnych ma status Y
jesli tak to sprawdza i wyświetla nick i poziom autoryzacji usera
tutaj juz jest zawartość panelu admina
i jesli strone get równa sie logout to szuka usera w bazie zalogowanegio usera i ustawia mu status online N
niszczy sesje

----------------------

opis problemu:

po testach prawie wszystko działa...
sesje pamieta wszystko jest ok. tylko jak wylogowuję to ustawia status N, ale nie niszczy sesji
tzn. jak chcę zalogowac innego usera to ustawia status Y ale nie tworzy nowej sesji, bo porzednia jeszcze istnieje (sprawdzałem poprzez wyświetlanie session_id)

teraz podam pliki:

systemy.php:

  1. <?php
  2. require_once ('includes/config.php');
  3. $szukaj = $db -> Execute("SELECT * FROM sid");
  4. $sid = $szukaj -> fields['sid'];
  5. $pass = $szukaj -> fields['pass'];
  6. $_SESSION['postsid'] = $_POST['sid'];
  7. $_SESSION['postpass'] = $_POST['pass'];
  8. if ($_SESSION['postsid'] == $sid && $_SESSION['postpass'] == $pass) {
  9. $_SESSION['sid'] = $_SESSION['postsid'];
  10. $_SESSION['pass'] = $_SESSION['postpass'];
  11. $zaloguj = $db -> Execute("UPDATE sid SET online = 'Y' WHERE sid = '".$_SESSION['sid']."' AND pass = '".$_SESSION['pass']."'");
  12. } 
  13. ?>


cos.tpl (tylko tresć php)

  1. <?php
  2. $online = $db -> Execute("SELECT online FROM sid WHERE sid = ".$_SESSION['sid']."");
  3. $zalogowany = $online -> fields['online'];
  4. if ($zalogowany == 'Y') {
  5. $ktojest = $db -> Execute("SELECT name FROM sid WHERE sid = ".$_SESSION['sid']."");
  6. $kto = $ktojest -> fields['name'];
  7. $poziom = $db -> Execute("SELECT auth FROM sid WHERE sid = ".$_SESSION['sid']."");
  8. $lvl = $poziom -> fields['auth'];
  9. echo'Witaj ';
  10. echo $kto;
  11. echo'<br />';
  12. if ($lvl == '1') {
  13. echo'Twój poziom administracyjny jest <b>najwyższy</b>, jesteś głównym administratorem.<br />';
  14. }
  15. echo'------------Opcje Admina------------<br />';
  16. if ($lvl == '1') {
  17. echo'opcje admina';
  18. }
  19. echo'opcje admina';
  20. echo'------------------------------------------------<br />';
  21. echo'<a href="?step=logout">Wyloguj</a>';
  22. if ($_GET['step'] == 'logout') {
  23. $wyloguj = $db -> Execute("UPDATE sid SET online = 'N' WHERE sid = '".$_SESSION['sid']."' AND pass = '".$_SESSION['pass']."'");
  24. echo'<br />sesja wygaszona!';
  25. }
  26. }
  27. ?>
Go to the top of the page
+Quote Post

Posty w temacie


Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 19.07.2025 - 17:31