[SOLVED][PHP] Proste logowanie z użyciem sesji

Bash, C, C++, Java, PHP, Ruby, GTK, Qt i wiele innych - wszystko tutaj.
Yakub
Piegowaty Guziec
Piegowaty Guziec
Posty: 12
Rejestracja: 29 lip 2006, 20:05
Płeć: Mężczyzna
Wersja Ubuntu: 10.04
Środowisko graficzne: GNOME
Architektura: x86
Kontakt:

[SOLVED][PHP] Proste logowanie z użyciem sesji

Post autor: Yakub »

Witam
Znalazłem na stronie http://webpl.org prosty sposób na logowanie z użyciem sesji. Kod jest następujący
login.php

Kod: Zaznacz cały

<?php 
//USTAWIENIA 

//Tutaj podajemy login oraz haslo 
$poprawny_login = 'login'; 
$poprawne_haslo = 'haslo'; 

//KONIEC USTAWIEN 


//Sprawdzenie czy podano login i haslo 
if (isset($login) && isset($haslo)) 
{ 
    //Sprawdzenie poprawnosci loginu i hasla 
    if ($login == $poprawny_login && $haslo == $poprawne_haslo) 
    { 
        //Start sesji 
        session_start(); 

        //Rejestracja sesji (dzieki temu skrypt wie ze osoba jest zarejestrowana 
        session_register('login'); 

        //Rejestracja sesji (dodatek zliczajacy wyswietlanie stron po zalogowaniu (jeżeli nie chcesz licznika wyświetlonych stron w danym logowaniu możesz to usunąć) 
        session_register('licznik'); 

        //Przekierowanie do strony dostepnej po zalogowaniu 
        header("Location: index.php?" . SID); 

        exit(); 
    } 
    else 
    { 
        //Jezeli podane bledne dane wyswietla ponizszy napis 
        echo 'Błędny login lub hasło!'; 
    } 
} 
else 
{ 
    //Ponizej znajduje sie formularz do logowania 
?> 
<form method="post" action="login.php" style="display:inline;"> 

Login: <input type="text" size="20" name="login">
 

Hasło: <input type="hasloword" size="20" name="haslo"><p> 

<input type="submit" value="Zaloguj"> 

</form> 
<? 
} 
?>
index.php

Kod: Zaznacz cały

<? 
//Start sesji 
session_start(); 

//Sprawdzenie czy istnieje nasza sesja, jezeli nie nastepuje przekierowanie do login.php 
if (!isset($_SESSION['login'])) 
{ 
    //Przekierowanie 
    header("Location: login.php"); 
    //Funkcja konczy generowanie strony, dzieki czemu szybciej przekieruje nas do login.php 
    exit(); 
} 
$_SESSION['licznik']++; 
?> 
Treść strony...<p> 
<? 
//Powitanie zarejestrowanej osoby jak najbardziej mozesz to skasowac 
echo 'Witaj ' . $_SESSION['login']; 
?> 

 
<? 
echo 'W tej sesji wyświetlono ' . $_SESSION['licznik'] . ' stron.'; 
?> 
<p> 
Tresc strony... 
<a href="logout.php">Wyloguj</a>
logout.php

Kod: Zaznacz cały

<? 
//Start sesji 
session_start(); 

//Informacja o wylogowanym uzytkowniku jak najbardziej mozesz to skasowac 
echo 'Użytkownik o nazwie "' . $_SESSION["login"] . '" został wylogowany.'; 

//Skasowanie sesji (wylogowanie) 
session_destroy(); 
?>
Problem jest taki ze po wczytaniu strony login.php oprócz wyświetlenia formularza logowania nic się nie dzieje. Po wpisaniu prawidłowych lub błędnych danych, stron tak jakby się odświeża i znowu wyświetla formularz logowania. Nie ma żadnych błędów ani ostrzeżeń. Na Windows 7 skrypty działają bez problemu, bez żadnych modyfikacji można się logować. Na Ubuntu 10.04 i Debianie Squeeze nie działają. Do zainstalowania PHP użylem polecenia:

Kod: Zaznacz cały

sudo aptitude install php5-mysql mysql-server mysql-common php5 apache2
Może problem jest w plikach konfiguracyjnych php lub apache?

Jeśli ktoś wie co jest nie tak, bardzo proszę o pomoc. Dzięki i pozdrawiam.
Awatar użytkownika
ethanak
Wygnańcy
Posty: 3054
Rejestracja: 04 gru 2007, 13:19
Płeć: Mężczyzna
Wersja Ubuntu: 12.04
Środowisko graficzne: GNOME
Architektura: x86
Lokalizacja: Bielsko-Biała
Kontakt:

Odp: [PHP] Proste logowanie z użyciem sesji i problem

Post autor: ethanak »

No i stąd sie biorą później palantoprogramiści co robią skrypty w pechapie po 50 PLN od sztuki, i sami nie wiedzą jak to działa.

Najpierw nauczyć się języka, później coś w nim pisać!

Polecam http://pl.php.net - a nie forum dotyczące konkretnej dystrybucji. PHP w Ubuntu działa tak samo jak na każdym innym Linuksie, a nawet na Windowsie (pomijając domyślne ustawienia - ale to można sobie sprawdzić na wyżej wymienionym linku).

(przepraszam jeśli przegiąłem, ale tacy pseudoprogramiści naprawdę działają mi na nerwy)
Кто жопой родился, чижиком не помрёт
Yakub
Piegowaty Guziec
Piegowaty Guziec
Posty: 12
Rejestracja: 29 lip 2006, 20:05
Płeć: Mężczyzna
Wersja Ubuntu: 10.04
Środowisko graficzne: GNOME
Architektura: x86
Kontakt:

Odp: [PHP] Proste logowanie z użyciem sesji i problem

Post autor: Yakub »

Przepraszam bardzo ale nie chodziło mi o samo działanie skryptu, dlatego ze jesli działa na innym systemie przy domyślnej konfiguracji serwera to znaczy ze jest dobrze napisany. Interesuje mnie bardziej ta konfiguracja serwera, bo widocznie w ubuntu nie jest taka sama jak na Webserv. To że ktoś sie próbuje dowiedzieć jak to działa nie znaczy ze zaraz musi być palantoprogramistą czy pseudoprogramista robiącym skrypty za "czapke śliwek", pamiętaj ze zawsze od czegos trzeba zaczac. pozdro
Awatar użytkownika
kabanek
Zakręcona Traszka
Zakręcona Traszka
Posty: 592
Rejestracja: 23 cze 2009, 20:34
Płeć: Mężczyzna
Wersja Ubuntu: 13.10
Środowisko graficzne: Xfce
Architektura: x86_64
Kontakt:

Odp: [PHP] Proste logowanie z użyciem sesji

Post autor: kabanek »

dwie rzeczy
  1. zmień temat wątku, bo Ci go wywalą!
  2. w pliku login.php gdzie ustalasz wartości $login oraz $haslo? Wiem o co Ci chodziło, gdy to pisałeś. Poczytaj o przesyłaniu danych formularzem w PHP
Awatar użytkownika
DDAroo
Serdeczny Borsuk
Serdeczny Borsuk
Posty: 107
Rejestracja: 27 cze 2009, 10:47
Płeć: Mężczyzna
Wersja Ubuntu: 11.04
Środowisko graficzne: KDE Plasma
Architektura: x86
Lokalizacja: Kraków
Kontakt:

Odp: [PHP] Proste logowanie z użyciem sesji

Post autor: DDAroo »

A plik login.php nie powinien przypadkiem zawierać linijki "session_start();" na początku jak pozostałe pliki? Na windowsie możesz mieć włączone automatyczne rozpoczynanie sesji (włącza się to w plikach konfiguracyjnych) i wtedy nie trzeba dodawać tej linijki na początku wszystkich plików *.php korzystających ze zmiennych sesji.
Yakub
Piegowaty Guziec
Piegowaty Guziec
Posty: 12
Rejestracja: 29 lip 2006, 20:05
Płeć: Mężczyzna
Wersja Ubuntu: 10.04
Środowisko graficzne: GNOME
Architektura: x86
Kontakt:

Odp: [PHP] Proste logowanie z użyciem sesji

Post autor: Yakub »

OK, już się uporałem. Dzięki kabanek za wskazanie błędu(trochę wstyd że nie zwróciłem uwagi wcześniej na te zmienne :) ). Pozwoliło mi to trochę ruszyć się z miejsca. Następnie okazało się, jak wyczytałem w jednej z moich mądrych książek, że funkcja session_register() jest już trochę stara i może powodować konflikty lub błędy, zamiast niej powinno się stosować $_SESSION. Po tym już wszystko zaczęło działać tak jak należy.

DDAro dzięki za zainteresowanie tematem. Co do session_start() to nie zauważyłem różnicy czy było to gdzieś w środku czy na początku skryptu, próbowałem różne kombinacje. Na wszelki wypadek zostawiłem na początku pliku :)

Dla zainteresowanych "pseudoprogramistów" tudzież "palantoprogramistów" zostawię poprawione skrypty

login.php

Kod: Zaznacz cały

<?php session_start();

$poprawny_login = 'login';
$poprawne_haslo = 'haslo';

$login = $_POST['login'];
$haslo = $_POST['haslo'];

if (isset($login) && isset($haslo))
{
	if ($login == $poprawny_login && $haslo == $poprawne_haslo)
	{
		
		$_SESSION['login'] = $login;
		$_SESSION['licznik'];
		header("Location: index.php?" . SID);
		exit();
	}
	else
	{
		echo 'Bledny login lub haslo';
	}
}
else
{
	echo '<form action="login.php" method="post">';
	echo 'Login: <input type="text" size="20" name="login"
';
	echo 'Haslo: <input type="text" size="20" name="haslo"><p>';
	echo '<input type="submit" value="Zaloguj">';
	echo '</form>';
}
?>
index.php

Kod: Zaznacz cały

<?php session_start();

if (!isset($_SESSION['login']))
{
	header("Location: login.php");
	exit();
}else {
	$_SESSION['licznik']++;
	echo 'Tresc strony';
	echo 'Witaj ' . $_SESSION['login'];
	echo '
';
	echo 'W tej sesji wyswietlono ' . $_SESSION['licznik'] . ' stron.';
	echo 'Tresc strony';
	echo '<a href="logout.php">Wyloguj</a>';
}
?>
logout.php

Kod: Zaznacz cały

<? session_start();
echo 'Uzytkownik o nazwie "' . $_SESSION["login"] . '" zostal wylogowany.';
session_destroy();
?>
Dziękuje i pozdrawiam.
ODPOWIEDZ

Wróć do „Programowanie”

Kto jest online

Użytkownicy przeglądający to forum: Obecnie na forum nie ma żadnego zarejestrowanego użytkownika i 8 gości