znikająca zmienna $_SESSION, sesje w PHP

znikająca zmienna $_SESSION, sesje w PHP
klimba
  • Rejestracja: dni
  • Ostatnio: dni
0

mam problem z sesją na mojej stronie www

mam stronę index.php w jej kodzie jest odnośnik
@$s = $_GET['s'];
który pobiera zmienną $s jeśli jest przekazywana
w menu strony mam linki do poszczególnych podstron np
menu1 <a href"?s=strona1">
i kod który to interpretuje

Kopiuj
 if(is_file("pages/$s.php")) 
                        {
                            include "pages/$s.php";
                        }
                    else
                        {
                            echo 'Nie ma takiej strony';
                        }

do strony dodałem obsługę sesji ale strona nie działa jak powinna.

przypadki
1.
-loguję się na stronę poprzez formularz gdzie podaję login i hasło
-formularz przekazuje zmienne $login i $haslo
-strona główna sprawdza czy te zmienne są przekazane jeśli tak szuka takiego użytkownika w bazie i jeśli takowy jest rozpoczyna sesję "session_start();
i jest OK
2. wylogowywanie
-wylogowywanie polega na przekazaniu zmiennej $close linkiem <a href="?close=1">
-strona głowna sprawdza czy jest taka zmienna jeśli jest i równa się 1 to zamyka sesję "session_destroy();"
3. tutaj zaczyna się problem
mam problem w przypadku kiedy juz jestem zalogowany i chcę przejść na inną podstronę.
wtedy mnie "wylogowuje" zmienna $_SESSION nie istnieje.
jak to naprawić jak przy przejściu na inną podstronę sprawdzić czy sesja jest aktywana czy zamknięta ?

CZY ZA KAŻDYM RAZEM ODŚWIEŻANIA STRONY INDEX.PHP MAM UŻYĆ POLECENIA "SESSION_START();" ??

BA
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 36
0

Tak, bo inaczej sesja się "wysypie". Nie wiem na ile to jest poprawne, ale (jeśli dobrze pamiętam, bo to było dość dawno) ja każdą podstronę zaczynałem session_start(); a za zalogowanie odpowidała jedna zmienna sesyjna

dzek69
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Rzeszów
0

tak, bez session_start() nie będzie sesji.

klimba
  • Rejestracja: dni
  • Ostatnio: dni
0

zrobiłem coś podobnego. Zaadoptowałem taki kod

Kopiuj

<pre><?php
session_start();
session_register("zalogowany");

if(empty($_SESSION["zalogowany"]))$_SESSION["zalogowany"]=0;

mysql_connect("localhost", "root", "")or die("Nie można nawiązać połączenia z bazą");
mysql_select_db("test")or die("Wystąpił błąd podczas wybierania bazy danych");

function ShowLogin($komunikat=""){
	echo "$komunikat<br>";
	echo "<form action='index.php' method=post>";
	echo "Login: <input type=text name=login><br>";
	echo "Hasło: <input type=text name=haslo><br>";
	echo "<input type=submit value='Zaloguj!'>";
	echo "</form>";
	echo "Jeśli nie jesteś zarejestrowany, <a href='rejestruj.php'>tu znajdziesz formularz</a>";
}

?>
<!DOCTYPE html 
	PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
	"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="pl" lang="pl">
<head>
	<title>Strona główna</title>
</head>
<body>
<?php
if($_GET["wyloguj"]=="tak"){$_SESSION["zalogowany"]=0;echo "Zostałeś wylogowany z serwisu";}
if($_SESSION["zalogowany"]!=1){
	if(!empty($_POST["login"]) && !empty($_POST["haslo"])){
		if(mysql_num_rows(mysql_query("select * from users where user_login = '".htmlspecialchars($_POST["login"])."' AND user_haslo = '".htmlspecialchars($_POST["haslo"])."'"))){
			echo "Zalogowano poprawnie. <a href='index.php'>Przejdź na stronę główną</a>";
			$_SESSION["zalogowany"]=1;
			}
		else echo ShowLogin("Podano złe dane!!!");
		}
	else ShowLogin();
}
else{
?>
Gratulacje! Zalogowałeś się pomyślnie! Możesz przejśc teraz do innych podstron, np. do <a href="stronka.php">tej</a>
<br><a href='index.php?wyloguj=tak'>wyloguj się</a>
<?php
}
?>

</body>
</html>
<?php mysql_close(); ?></pre>
 

i w sumie chodzi niby nieźle. Czyli można się logować i można się wylogować.... ale jest jeden problem.
powiedzmy, że jestem użytkownikiem o loginie 'user1'
po wylogowaniu się, kiedy znowu pojawia się formularz do logowania i wpisaniu tam bzdur typu Login:'jkshdafjkasdjk' i hasło: 'jkasdhfjka'
i potwierdzeniu strona powraca do momentu kiedy jest zalogowany znowu 'user1' a tak nie powinno być. Jak to zakodować żeby chodziło OK ?

Ola Nordmann
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 414
1

Może wyczyść całą sesje przy wylogowywaniu. Najlepiej zacznij od tego:
http://bit.ly/1jtmIMF

dzek69
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Rzeszów
1

po wylogowaniu możesz zrobić session_destroy, albo po prostu usunąć to, co nie jest potrzebne. warto też zrobić redirect po wylogowaniu, żeby pozbyć się ew. innych danych już pobranych wcześniej

klimba
  • Rejestracja: dni
  • Ostatnio: dni
0

a co to jest i jak się robi redirect ? :)

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.