Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Bezwzględne wylogowanie.
Forum PHP.pl > Forum > PHP
Wiciu125
Pisze właśnie stronkę która umożliwia logowanie się na stronie różnych userów. Wylogowałem sie i wszystko było ok do momentu gdy przez pomyłkę kliknąłem na przycisk wstecz swojej przeglądarki. Wyświetlił mi się komunikat "Strona wygasła" no to wcisnąłem odświerz i ujrzałem iż wylogowany przed chwilą user znów był zalogowany. Szukałem i znalazłem coś na zasadzie

header ("Expires: Mon, 26 Jul 1997 05:00:00 GMT");
header ("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT");
header ("Cache-Control: no-cache, must-revalidate");
header ("Pragma: no-cache");

Według opisu te nagłówki należy umieścić w kodzie na każdej dostępnej stronie po zalogowaniu.
Jednak gdy to umieściłem w kodzie sytuacja się powtórzyła. Proszę o pomoc.
adwol
Cytat
Pisze właśnie stronkę która umożliwia logowanie się na stronie różnych userów. Wylogowałem sie i wszystko było ok do momentu gdy przez pomyłkę kliknąłem na przycisk wstecz swojej przeglądarki. Wyświetlił mi się komunikat "Strona wygasła" no to wcisnąłem odświerz i ujrzałem iż wylogowany przed chwilą user znów był zalogowany. Szukałem i znalazłem coś na zasadzie

header ("Expires: Mon, 26 Jul 1997 05:00:00 GMT");
header ("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT");
header ("Cache-Control: no-cache, must-revalidate");
header ("Pragma: no-cache");

Według opisu te nagłówki należy umieścić w kodzie na każdej dostępnej stronie po zalogowaniu.
Jednak gdy to umieściłem w kodzie sytuacja się powtórzyła. Proszę o pomoc.

A możesz później coś zrobić w tej sesji? Sprawdź czy to nie jest jakoś skeszowana strona (widziałem juz proxy, które olewały nagłówki sterujące keszowaniem). W jaki sposób w ogóle utrzymujesz sesje? Na cookie? Jeśli tak to sprawdź czy na pewno usuwasz je od klienta przy wylogowywaniu, czy usuwasz je z bazy oraz czy kod sprawdzający jest ok. Jeśli po odświeżeniu strony rzeczywiście dalej jesteś zalogowany to nie jest to wina nagłówków, tylko kodu.
Wiciu125
Wiesz co, po odświerzeniu strony jestem wciąż zalogowany. Swoją stronę mam na własnym serwerze postawionym na łączy kablówki. Jeśli chodzi o nagłówki to na pewno działa mi nagłówek
header("location: index.php");

chciałem zrobić formularz logujący w jednej z ramek strony. Przy pozytywnym zalogowaniu zamiast formularz miałasię pojawić informacja kto jest aktyalnie zalogowany. Nie robiłem logowania jako nowo otwarte okno tylko zagniexdzić całą operację w tej jednej z tabel. Znaczy że pracuję na jednym skrypcie index.php a logowanie jest jako include. Może coś Ci ta informacja pomoże.
adwol
Cytat
Wiesz co, po odświerzeniu strony jestem wciąż zalogowany.

Pokaż kawałki kodu, które logują i wylogowywują użytkowników.
Wiciu125
Tutaj następuje wybór odpowiednich działań albo formularz albo info o zalogowanym uzytkowniku


switch ($pol)
{
case(1):
Print"<FORM method=post action="$PHP_SELF?pol=2" NAME=wiciu>".
"<INPUT TYPE=text NAME=login size=13><BR>".
"<INPUT TYPE=text NAME=haslo size=13><BR>".
"<INPUT TYPE=submit VALUE=ENTER size=5></FORM>";
break;


case(2):
$serwer=mysql_connect("localhost", "xx", "xx") or die("Nie można nawiązać połączenia z serwerem".mysql_error());
$baza=mysql_select_db("xx") or die("Błąd podczas połączenia z bazą danych".mysql_error());
$zapytanie="Select * from users where login="."'".$login."'"." And haslo="."'".$haslo."'";
$polecenie=mysql_query($zapytanie) or die ("Błąd przy wykonywaniu zapytania".mysql_error());
$wynik=mysql_num_rows($polecenie);
session_register("napis");
$napis="Kartofel";

IF ($wynik<>0)
{

session_register("zlogin","zhaslo","zalogowany");
$zalogowany=$login;
$zlogin=$login;
$zhaslo=$haslo;


WHILE($row=mysql_fetch_array($polecenie))
{
SWITCH($row[4])
{
CASE("admin"):
Print "To jest administrator <br><a href=logoff.php>Wylogój</a>";
BREAK;

CASE("user"):
Print "To jest urzytkownik";
BREAK;
}
}
} ELSE {
header("location: index.php?pol=1&zalogowany=''");
}
}

wylogowanie

session_start();
$_SESSION = array();
session_destroy();
header ("Location: index.php");
DeyV
holy shit...
Ludzie - przecież kolorowanie jest takie łądne... Takie niepowtarzalne...
Nikt nie ma takiego jak my na tym forum (wiem coś o tym)
Czemu więc z tego nie KORZYSTACIE!!!!questionmark.gif?!!!!
kurtz
Hej
Cytat
holy shit...
To sie zdecyduj.. albo jedno albo drugie ;p
Cytat
Ludzie - przecież kolorowanie jest takie łądne... Takie niepowtarzalne...Nikt nie ma takiego jak my na tym forum (wiem coś o tym) Czemu więc z tego nie KORZYSTACIE!!!!???!!!!
"Z jakiego kolorowania?"


Pozdrawiam
[Regis]
Z takiego ladnego przycisku z napisem php w oknie dodawania posta tongue.gif biggrin.gif
kurtz
Hej
Cytat
"]Z takiego ladnego przycisku z napisem php w oknie dodawania posta :P :D
abojawiem co to jest? wogole pocoto. i tak dalej...


Pozdrawiam
Jabol
Cytat
Hej
Cytat
"]Z takiego ladnego przycisku z napisem php w oknie dodawania posta tongue.gif biggrin.gif
abojawiem co to jest? wogole pocoto. i tak dalej...
kurtz, kolory Ci wyłączyli i udajesz "psa ogrodnika" ;P ?
Ja osobiście nie czytam nawet większych kodów bez bbcode
kurtz
Hej
Cytat
Ja osobiście nie czytam nawet większych kodów bez bbcode
Nie - po prostu staram sie powiedziec wszystkim imć moderatorom, że trudno jest kogokolwiek zachecic do bbcode jesli nie wie co to jest lub nigdy z tego nie korzystal/ korzystal rzadko.

Niech kazdy raz klepnie sobie "odpowiedz". w dowolnym miejscu - i teraz nigdy w zyciu nie pisalem na forum phpbb. z czym kojarzy sie napis "kod php"? mi nie bardzo z kolorowaniem skladni.


Wniosek: skoro od mieisaca czy dwoch mowie o problemie i nikt jakos nie pokwapil sie to powiem dobitniej - dopoki "gdzies" nie bedzie jasnej informacji jak uzywac bbcode i to co wogole jest (ale NIE odnosnik do FAQ) nie sadze by ktokolwiek przejmowal sie jakimstam czerownym napisem php czy code.

Dalej: banalnym pomyslem na dzien dobry jest przed textarea umiesic tresc "Aby twoje wypowiedzi byly bardziej czytelne uzywaj BBCode. Np kod php nalezy otoczac znacznikiem [php][/php] - np [php]echo $imie[/php] da [php:1:e0c9a259e1]echo $imie[/php:1:e0c9a259e1] a zapytania do bazy danych znacznikiem [sql][/sql] - np [sql:1:e0c9a259e1]SELECT Imie FROM Klienci[/sql:1:e0c9a259e1]. Wiecej o znacznikach BBCode znajdziesz w ...."

UF


Pozdrawiam i moze by wydzielic fragment wateku i przerzucic na Opinie?...
Wiciu125
Dziękuje za uwagę ale czy mógłbym prosić o odpowiedź na temat bezwzględne wylogowanie? Jest to dla mnie istotne. Dzieki :idea:
kurtz
Hej
Cytat
Pisze właśnie stronkę która umożliwia logowanie się na stronie różnych userów. Wylogowałem sie i wszystko było ok do momentu gdy przez pomyłkę kliknąłem na przycisk wstecz swojej przeglądarki. Wyświetlił mi się komunikat "Strona wygasła" no to wcisnąłem odświerz i ujrzałem iż wylogowany przed chwilą user znów był zalogowany.

Po kolei - przegladam twoj kod i widze ze masz ustawianie zmiennej sesyjnej zlogin - wystarczy wiec ze zeby sprawdzic czy ktos jest zalogowany sprawdzac bedziesz czy istnieje ta zmienna sesyjna. do tego pewnie juz doszedles.
druga sprawa to "odswiez" ktore znowu zalogowuje - tutaj moge tylko przypuszac. jesli odsiezasz strone na ktorej wczesniej ciebie zalogowalo to dane (login & haslo) sa ponownie wysylane do skryptu php a ten autentykuje. Aby rozwiazac tego typu problemy zamiast od razu pokazywac "to jest ..." mozesz przekierowywac na inna strone - jesli autentykacja sie powiodla na strone dla zalogowanych, jesli nie na strone dla niezalogowanych. w ten sposob odpada "odswiez" - czesto to najprtsze rozwiazanie.
Ja sugerowalbym jednak cos wydaje mi sie lepszego - zamiast niszyc sesje zostaw ja i tylko usun (unregister) zmienne zlogin itd. wowczas aby sprawdzac czy ktos jest zalogowany wystarczy ze bedziesz sprawdzal czy istnieje zmienna sesyjna. jesli nie - uzytkownik nie jest zalogowany lub go wlasnie wylogowales ;)

PS
uzywanie session_register jest odradzane. Od jakiegos czasu promowane jest np bezposrednie uzywanie $_SESSION["zmienna"] = "wartosc"; <-- w ten sposob deklarujesz zmienna sesyjna, widoczna na nastepnej stronie ;) Jest to o tyle wygodne ze nie musisz tworzyc dodatowej zmeinnej ktora zaraz przekazesz do session_register. latwiej tez troszke nad wszystkim panowac.

uf. starczy - jak cos niejasne to pytaj.

Pozdrawiam
Wiciu125
Serdeczne dzięki. Chyba o to mi chodziło. Jakby co to jescze się odezwę.
Wiciu125
Mam jeszcze jedno pytanie. Może się orientujesz w jaki sposób stworzyć szablony stron tzn żeby X-razy nie pisać tego samego kodu strony np tabele itd.
kurtz
Hej
Cytat
Mam jeszcze jedno pytanie. Może się orientujesz w jaki sposób stworzyć szablony stron tzn żeby X-razy nie pisać tego samego kodu strony np tabele itd.
Najlatwiej:[php:1:016db6ca6e]<?php
include("./gora.inc.php");
?>
treees :)
<?php
include("./dol.inc.php");
?>[/php:1:016db6ca6e]To rozwiazanie ma jednak wady - kiedy przyrasta stron robi sie wielki balagan. Lepszym pomyslem jest rodzielenie kodu HTML od kodu php - to duzy krok do przodu :) - aby to zrobic mozesz korzystac z systemow szablonowych - na poczatek proponuje zaczac od jakis prostych - np FastTemplate, IT Templates. Artykuly o nich znjadziesz np na http://www.phpbuilder.com . Jesli chcesz i czujesz sie na silach od razu wskoczyc na glebsza wode polecam Smarty - http://smarty.php.net - to wg mnie najpotezniejszy system do szablonow gdy idzie o php - ma bardzo duze mozliwosci i sprawdza sie w dzialaniu. Ostatnio nawet uczestnicy tego forum zaczeli go uzywac ;)p. O smarty jest niewiele materialow po polsku ale na forum php znajdziesz kilka wprowadzjacych artykulow - co gdzie i jak.


Pozdrawiam
Wiciu125
No to dziekuję za odpowiedź.
Wiciu125
Chyba Cie jeszcze pomęcze. Otóż czy istnieje w php jakaś funkcja która przekierowuje na inną stronę oprócz header("Location: xxxx"); Ponieważ właśnie napisałem to co mi powiedziałeś czyli index.php jako na strcie a po nim z formularza dane do skrypty logującego , a z niego przy użyciu header przekierowanie na stronę dla zalogowanych. Jednak w tej stronie tzn dla strony dla zalogowanych po wciśnięciu wyloguj i wciśnięciu wstecz wracam do stronki gdy byłem zalogowany. Mam nadzieję że w miarę jasno się określiłem
spenalzo
W php nie, ale w HTMLu:
[xml:1:17dc60aca1]
<meta http-equiv="Refresh" content="0; URL=strona.php">[/xml:1:17dc60aca1]
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.