Rafał Gajewski

Rafał Gajewski projektowanie
graficzne /
tworzenie www

Temat: problem z zachowaniem sesji po logowaniu

PRZEPRASZAM ZA DUBEL TEMATU!

Witam.

Mam mały problem, a mianowicie:

Napisałem skrypt logowania z zapisaniem sesji,
i teraz:
jak zrobić żeby przenieśc sesje do kolejnych podstron, tzn. np jak sie zaloguję to żeby przechodziło spowrotem do indexu, z tym że żeby w indexie w menu zamiast np: "zaloguj, zarejestruj się" pokazywało linki: "zalogowany:&user, wyloguj"

Męcze się z tym od dwóch dni i nic nie wychodzi.
Proszę o pomoc. Z góry dzieki za rady, i podpowiedzi.

plik login.php:


<?

session_start();
?>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3c.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3c.org/1999/xhtml" xml:lang="pl" lang="pl">
<head>

<meta http-equiv="content-type" content="text/html; charset=iso-8859-1" />

<link rel="stylesheet" type="text/css" href="style.css" />
<title>tshit</title>
</head>





<body>
<?
include ('menu.inc');
?>



<center>
<div id="middle">
<div id="main">



<?

require_once ('mysql_connect.php');

$user_ip = $_SERVER['REMOTE_ADDR'];
$time = date('H:i');

$sesja_anim = 0; #sesja uzytkownika anonimowego
$sesja_uzytkownika = $user;

if(!isset($_SESSION['username']))
{ $_SESSION['username'] = $sesja_anim; #inicjuje sesje uzytkownika anonimowego echo "zostala zinicjowana sesja uzytkownika anonimowego<br>";
}


if($_SERVER['REQUEST_METHOD'] == 'POST')
{
$login = $_POST['username'];
$haslo = md5($_POST['password']);

if($_POST['username'] and !$_POST['password'])
{
echo "Musisz podac haslo!";
}

if(!$_POST['username'] and $_POST['password'])
{
echo "Musisz podac login!";
}

if(!$_POST['username'] and !$_POST['password'])
{
echo "Nie wypelniono pól!";
}
if($_POST['username'] and $_POST['password'])
{

$pobierz_usera = mysql_query("select username, password from users where `username`='$login'");
while($napisz_usera = mysql_fetch_row($pobierz_usera))
{
$user = $napisz_usera[0];
$pass = $napisz_usera[1];
}

if($login != $user)
{
echo "Nie ma takiego uzytkownika"; }

else
{
if($pass != $haslo)
{ $_SESSION['username'] = $sesja_uzytkownika;
$sesja_anim = "";
echo "Zalogowany jako $user <br> <a href=index.php?akcja=wyloguj>Wyloguj</a>";
echo "<a href='index.php?id=$user'>index</a>";



}
else
{
echo "podano zle haslo!";
}
}

}
}





if($_SESSION['username'] == $sesja_anim)
{ echo "<form action=login.php method=post>
<input type=text name=username><br>
<input type=text name=password><br>
<input type=submit value=\"Zaloguj\">
</form>
";
}


if($akcja == 'wyloguj')
{
$sesja_uzytkownika = "";
$_SESSION['username'] = $sesja_anim;
echo "Zostales wylogowany<br><a href=login.php>Wróc</a>";
}

?>
</div><?

include ('metka.inc');
?>
<div id="right">
<br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br />
</div>
</div>
</center>


<?php
include ('footer.inc');
?>

</body>

Rafał Gajewski edytował(a) ten post dnia 22.06.10 o godzinie 17:06

konto usunięte

Temat: problem z zachowaniem sesji po logowaniu

latwiej byloby ci zrobic cos takiego ze wszystko jest w pliku index.php, a w login.php
sa tylko f-cje logowania. czyli mniej wiecej, zalozmy ze proces logowania odbywa sie jakby przez plik index.php czyli aby sie wyswietlil formlulrz logowania ktos musi kliknac link index.php?akcja=zaloguj

i teraz:

zawartosc index.php


<?
session_start();
session_register('tablica');
$tablica = $_SESSION['tablica']

include('logowanie.php');
?>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3c.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3c.org/1999/xhtml" xml:lang="pl" lang="pl">
<head>

<meta http-equiv="content-type" content="text/html; charset=iso-8859-1" />
<link rel="stylesheet" type="text/css" href="style.css" />
<title>tshit</title>
</head>

<body>
<?
include ('menu.inc');
?>


<center>
<div id="middle">

<?
// DO TEGO PONIZEJ MOZESZ DOODAC LINKI TYPU
// index.php?akcja=wyloguj, albo index.php?akcja=zaloguj

if($tablica['zalogowany'] == 1)
print 'Zalogwany jako '.$tablica['login'].'.';
else
print 'Zaloguj';

?>

<div id="main">

<?
if ($_GET['akcja'] == 'zaloguj')
{
// WYSWIETL FORMLULARZ LOGOWANIA, KTORY PRZESLE DANE DO
// index.php?akcja=logowanie
}

if ($_GET['akcja'] == 'logowanie')
{
if($_POST['username'] and !$_POST['password'])
{
echo "Musisz podac haslo!";
}


if(!$_POST['username'] and $_POST['password'])
{
echo "Musisz podac login!";
}

if(!$_POST['username'] and !$_POST['password'])

{
echo "Nie wypelniono pól!";
}

if($_POST['username'] and $_POST['password'])
if ( funkcja_logujaca($_POST['username'], $_POST['password'])== true)
{
$tablica['login'] = $_POST['username'];
$tablica['zalogowany'] = 1;

}
else
{
$tablica['zalogwoany'] = 0;
}
session_register('tablica');
}



plik logowanie.php


require_once ('mysql_connect.php');

funkcja_logujaca($login, $haslo)
{

// TUTAJ sprawdz czy halso i login sa poprawne jezeli tak zworc true
return true;

// jezeli nie jest porawne zwroc false;
return false;

}


Przepraszam ze kod nie sformatowany, ale nie mam czasu, to co napisalem mozliwe ze nie zadziala, to tylko ma naprowacic Ciebie na inny sposob rozwiazania problemu.

zajzyj na php.net tam jest kopalnia wiedzy

PozdrawiamIgor K. edytował(a) ten post dnia 22.06.10 o godzinie 17:32
Rafał Gajewski

Rafał Gajewski projektowanie
graficzne /
tworzenie www

Temat: problem z zachowaniem sesji po logowaniu

dzieki za wskazówke, napewno skorzystam

ale wciąż nie rozwiązuje to mojego problemu ;)
Janusz Robert Gołębiewski

Janusz Robert Gołębiewski Fullstack Designer /
Developer

Temat: problem z zachowaniem sesji po logowaniu

Na kolejnych podstronach serwisu robisz session_start(); i powinieneś mieć wszystkie zmienne sesyjne dostępne

konto usunięte

Temat: problem z zachowaniem sesji po logowaniu

Rafał Gajewski:
dzieki za wskazówke, napewno skorzystam

ale wciąż nie rozwiązuje to mojego problemu ;)

A może chodzi o to, że przed <?php masz jakies spacje lub entery. Jak robisz sesje to przed <?php nie moze być dosłownie NIC.

Nie czytałem twojego kodu bo mi się nie chciało, ale taka uwaga mi się jakoś nasunęła ;)
Rafał Gajewski

Rafał Gajewski projektowanie
graficzne /
tworzenie www

Temat: problem z zachowaniem sesji po logowaniu

dzieki za rady i podpowiedzi, bede kombinował dalej ... a z ty zeby zrobic logowanie na indexie muslalem, i chyba faktycznie tak bedzie najlepiej

konto usunięte

Temat: problem z zachowaniem sesji po logowaniu

Rafał Gajewski:
dzieki za rady i podpowiedzi, bede kombinował dalej ... a z ty zeby zrobic logowanie na indexie muslalem, i chyba faktycznie tak bedzie najlepiej

$login = $_POST['username'];

$pobierz_usera = mysql_query("select username, password from users where `username`='$login'");


za coś takiego powinieneś klęczeć na grochu i `krzyczeć jestem głupkiem który nie zna się na sqlInjection`

nie odbieraj tego osobiście, ja tylko delikatnie zwracam uwagę

ps.

jako login wpisz:

admin'; update users set password ='qwerty' where username ='admin';--

ciekawe jak zareaguje twoja aplikacja po pierwszym błędnym logowaniu :) jaak wpiszesz admin/qwerty

konto usunięte

Temat: problem z zachowaniem sesji po logowaniu

Igor K.:
latwiej byloby ci zrobic cos takiego ze wszystko jest w pliku index.php, a w login.php
sa tylko f-cje logowania. czyli mniej wiecej, zalozmy ze proces logowania odbywa sie jakby przez plik index.php czyli aby sie wyswietlil formlulrz logowania ktos musi kliknac link index.php?akcja=zaloguj

i teraz:

zawartosc index.php


<?[/quote]> session_start();[quote] session_register('tablica');
$tablica = $_SESSION['tablica']


http://php.net/manual/pl/function.session-register.php
3 uwaga

Przy korzystaniu z tablicy $_SESSION (lub $HTTP_SESSION_VARS) nie nalezy korzystać z funkcji session_register(), session_is_registered() i session_unregister().

co o tym sądzisz?Przemysław R. edytował(a) ten post dnia 22.06.10 o godzinie 22:07
Rafał Gajewski

Rafał Gajewski projektowanie
graficzne /
tworzenie www

Temat: problem z zachowaniem sesji po logowaniu

dzieki za zwrocenie uwagi na to.

wiesz, ucze sie z troche starej ksiazki wiec pewnie dlatego takie gafy robie

konto usunięte

Temat: problem z zachowaniem sesji po logowaniu

Rafał Gajewski:
dzieki za zwrocenie uwagi na to.

wiesz, ucze sie z troche starej ksiazki wiec pewnie dlatego takie gafy robie

nigdy, przenigdy tak nie rób

proponuję jak już
http://php.net/manual/en/mysqli.prepare.php

lub
http://php.net/manual/en/pdo.prepared-statements.php

do wyboru do koloru

konto usunięte

Temat: problem z zachowaniem sesji po logowaniu

Przemysław R.:
Rafał Gajewski:
dzieki za zwrocenie uwagi na to.

wiesz, ucze sie z troche starej ksiazki wiec pewnie dlatego takie gafy robie

nigdy, przenigdy tak nie rób

proponuję jak już
http://php.net/manual/en/mysqli.prepare.php

lub
http://php.net/manual/en/pdo.prepared-statements.php

do wyboru do koloru

To ja dodam jeszcze dwa linki:
http://www.phpriot.com/
http://phpro.org

miłej nauki :D
Wojciech Soczyński

Wojciech Soczyński Programista
eksplorator -
blog.wsoczynski.pl

Temat: problem z zachowaniem sesji po logowaniu

Tak w ogóle, to na końcu skryptu powinno być


session_write_close();


inaczej sesja się nie zapamięta

konto usunięte

Temat: problem z zachowaniem sesji po logowaniu

Wojciech Soczyński:
Tak w ogóle, to na końcu skryptu powinno być


session_write_close();


inaczej sesja się nie zapamięta

jakby to powiedzieć, nie mam czegoś takiego i sesje działają

konto usunięte

Temat: problem z zachowaniem sesji po logowaniu

Przemysław R.:
jakby to powiedzieć, nie mam czegoś takiego i sesje działają

Bo, jakby to powiedzieć, czasami jest to niezbędne, czasami zaś nie :)
Może kwestia konfiguracji serwera.

Dodam jeszcze, że przez określenie "sesja nie działa" rozumiem tutaj konieczność użycia tej funkcji tuż przed wykonaniem jakiegoś przekierowania.Darek N. edytował(a) ten post dnia 23.06.10 o godzinie 09:58
Wojciech Soczyński

Wojciech Soczyński Programista
eksplorator -
blog.wsoczynski.pl

Temat: problem z zachowaniem sesji po logowaniu

Przemysław R.:
Wojciech Soczyński:
Tak w ogóle, to na końcu skryptu powinno być


session_write_close();


inaczej sesja się nie zapamięta

jakby to powiedzieć, nie mam czegoś takiego i sesje działają
No cóż nie kwestionuje tego, że może działać i bez (wszystko pisze w manualu) ale nie zaszkodzi spróbować jak nie działa, ja osobiście zawsze tego używam

konto usunięte

Temat: problem z zachowaniem sesji po logowaniu

Przemysław R.:
Igor K.:
latwiej byloby ci zrobic cos takiego ze wszystko jest w pliku index.php, a w login.php
sa tylko f-cje logowania. czyli mniej wiecej, zalozmy ze proces logowania odbywa sie jakby przez plik index.php czyli aby sie wyswietlil formlulrz logowania ktos musi kliknac link index.php?akcja=zaloguj

i teraz:

zawartosc index.php


<?[/quote][/quote]> > session_start();[quote][quote] session_register('tablica');
$tablica = $_SESSION['tablica']


http://php.net/manual/pl/function.session-register.php
3 uwaga

Przy korzystaniu z tablicy $_SESSION (lub $HTTP_SESSION_VARS) nie nalezy korzystać z funkcji session_register(), session_is_registered() i session_unregister().

co o tym sądzisz?Przemysław R. edytował(a) ten post dnia 22.06.10 o godzinie 22:07


Podtrzymuje moja poprzednia wypowiedź:

Przepraszam ze kod nie sformatowany, ale nie mam czasu, to co napisalem mozliwe ze nie zadziala, to tylko ma naprowacic Ciebie na inny sposob rozwiazania problemu.

zajzyj na php.net tam jest kopalnia wiedzy

:)

Pozdrawiam

konto usunięte

Temat: problem z zachowaniem sesji po logowaniu

Igor K.:

Podtrzymuje moja poprzednia wypowiedź:

Przepraszam ze kod nie sformatowany, ale nie mam czasu, to co napisalem mozliwe ze nie zadziala, to tylko ma naprowacic Ciebie na inny sposob rozwiazania problemu.

zajzyj na php.net tam jest kopalnia wiedzy

:)

Pozdrawiam

http://qualitypoint.blogspot.com/2010/01/difference-be...
session_register() is used to register a session variable and it works only when register_globals is turned on

kto w dzisiejszych czasach skazuje się na register_golobals?

konto usunięte

Temat: problem z zachowaniem sesji po logowaniu

Przemysław R.:
Igor K.:

Podtrzymuje moja poprzednia wypowiedź:

Przepraszam ze kod nie sformatowany, ale nie mam czasu, to co napisalem mozliwe ze nie zadziala, to tylko ma naprowacic Ciebie na inny sposob rozwiazania problemu.

zajzyj na php.net tam jest kopalnia wiedzy

:)

Pozdrawiam

http://qualitypoint.blogspot.com/2010/01/difference-be...
session_register() is used to register a session variable and it works only when register_globals is turned on

kto w dzisiejszych czasach skazuje się na register_golobals?

Niewiem kto sie skazuje na register_globals, moim zdaniem warto jest znac wszystkie mechanizmy, poprawne, niepoprawne, i nawet napisac stronke tak jak w tym pierwszym poscie z SQL'ami ktore dadza sie wysadzic tylko po to ... by samemu pokombinowac i sie nauczyc dlaczego pisze sie troche inaczej.
Gotowe podejrzenie 'bezpiecznego' kodu z jakiejgos forum uczy tylko bezmyslnego kopiowania.Aby moc nauczyc sie dobrze programowac a jakimkolwiek jezyku trzeba zaczac od najprostrzych rzeczy (czesto blednych) tylko po to aby zrozumiec ze nic nie jest do konca bezpieczne i nauczyc sie przewidywac przyszle zagrozenia.
Jezeli ktos jest poczatkujacy i chce sie nauczyc programowac to niech pisze jak chce, w koncu sie nauczy gdy za ktoryms razem strona sie wysypie, gdy ktos kompletnie nie zna jezyka, warto jest zlecic robote komus innemu i problem z glowy.

Fragmet kodu z session_register napisalem z pamieci, zobacz ze jest tez kawalek z $_SESSION[] .. napisalem ze kod moze nie zadzialac, ech moze powinienem to pogrubic .., sam ten post jest o tematyce raczej dla bardzo poczatkujacych, nie bede sie wysilal i za kogos pisal wszystko ladnie i poprawnie, nierozumiem skad wyrosla na ten temat tak obszerna dyskusja. Gdy ktos potrzebuje wskazowki, to nie dajesz mu calej genezy problemu tylko pokazujesz mu ze mozna zrobic cos inaczej ... przynajmniej takie jest moje zalozenie. Czlowiek uczy sie najlepiej na swoich bledach, nikt nie jest perfekcjonista i moim zdaniem dzieki takiemu podejsciu mozna cos osiagnac.

the end

konto usunięte

Temat: problem z zachowaniem sesji po logowaniu

Igor K.:
kto w dzisiejszych czasach skazuje się na register_golobals?

Niewiem kto sie skazuje na register_globals

każdy kto używa session_register()
Marcin B.

Marcin B. Student, Wojskowa
Akademia Techniczna
w Warszawie

Temat: problem z zachowaniem sesji po logowaniu

Twoj kod jest delikatnie mowiac mało czytelny, piszac strukturalnie staraj sie korzystac z funkcji - sa naprawd przydatne zwlaszcza w przypadku łączenia html'a z php'em. Jeśłi chodzi o sesje to proponuje wykonac troche testow. Wystartuj sesje, zarejestruj i wysietl. Przejdz do innej podstrony i zobacz czy sesja nie wygasla.
Jesli jej nie ma to zostaw w spokoju logowanie i szukaj problemu w sesji. Jesli jest to zacznij zabawe z tym ciezkim kodem, ktory wyklepales. Początki są ciezkie, ale po trupach do celu :-)

Logowanie bym zrobil w taki sposob


$log = mysql_query("SELECT `id`, `login`, `pass` FROM `usrLogin` WHERE `login` = '" . mysql_real_escape_string($_POST['usrLogin']). "' AND `pass` = '" . md5($_POST['usrPass']). "'");
$userData = mysql_fetch_assoc( $log );
if(mysql_num_rows($log)==1) {
$_SESSION['login']=mysql_result($log, 0, 'login');
$_SESSION['id']=mysql_result($log, 0, 'id');
}
else{
echo"Błędne dane";
}




A jak chcesz wylogoanie zrobic to na podstawie Twojego przykladu proponuje:


if(isset($_SESSION['username']) && $_SESSION['username']!=0){
echo"wyloguj";
}
else{
echo"zaloguj";
}


Poza tym kod ktory napisales raczej nie ma prawa dzialac,zwroc uwage co po udanym porównaniu danych zapisujesz do $_SESSION['username'] - tu chyba powinna byc zapisana $login lub $user (w zaleznosci od tego czy chcesz wyswietlac to co user wpisze w formularzu logowania czy rejestracji) a nie pusta zmienna jaka jest $sesja_uzytkownika.

co dalej..


if($pass != $haslo)
{ $_SESSION['username'] = $sesja_uzytkownika;
$sesja_anim = "";
echo "Zalogowany jako $user <br> <a href=index.php?akcja=wyloguj>Wyloguj</a>";
echo "<a href='index.php?id=$user'>index</a>";
}
else
{
echo "podano zle haslo!";
}



Gdzie tu logika? :-) Powinno byc chyba :


if($pass == $haslo)
{ $_SESSION['username'] = $login;
}
else
{
echo "podano zle haslo!";
}



a wyswietlanie linka do logout robisz tak jak pisalem wyzej. Strasznie utrudniasz sobie zycie, chociaz wiem ze sam na poczatku nie bylem lepszy i wybieralem zawsze najgorsze rozwiazanie z mozliwych. Jeszcze dluga droga przed Toba...Marcin Braniewski edytował(a) ten post dnia 24.06.10 o godzinie 22:27

Następna dyskusja:

problem z zachowaniem sesji...




Wyślij zaproszenie do