kid_m
(kid_m)
28 Marzec 2008 09:43
#1
Cześć,
___
$login= ...
if ($_SESSION["zalogowany"]==1) {
echo "Zalogowany: $login".". ";
echo "Wyloguj mnie.";
}
if ($_GET["wyloguj"]=="tak") {
$_SESSION["zalogowany"]=0;
header("Location: start.php");
exit();
}
___
[/code]
Czy istnieje jakaś prosta funkcja na pobranie nazwy zalogowanego użytkownika? (loginy i hasła są zapisane w bd)
crew1
(L337 Crew)
28 Marzec 2008 09:55
#2
Takie coś powinieneś robić tuż przy logowaniu.
W momencie podania loginu i hasła - porównać z tym co jest w bazie i przypisać wartości zmiennym sesyjnym.
Np. coś w takim schemacie:
function loguj($login, $pw){ pobierz z bazy dane, używając klauzuli warunkowej WHERE (where … = $login AND … = $pw) i limituj do jednego rekordu. Następnie jeśli ilość zwróconych wierszy jest równa jeden (login i hasło pasują) - utwórz zmienne sesyjne: $_SESSION[‘login’] = $x[‘login’] $_SESSION[‘miejsce_zamieszkania’] = $x[‘cos’] itd. }
Później gdzieś na stronie: echo $_SESSION[‘login’]; i po problemie.
Do ideału tak czy inaczej daleko, bo warto pomyśleć nad zabezpieczaniem danych sesyjnych - np. poprzez sprawdzanie czy dane z sesji zgadzają się z tymi w bazie danych - unikniesz wtedy tzw. zatruwania sesji, które w Twoim kawałku kodu może wystąpić ($_SESSION[‘zalogowany’] = 1) ;]
kid_m
(kid_m)
28 Marzec 2008 11:44
#3
$zapytanie="SELECT * FROM users WHERE
user_login='".htmlspecialchars($_POST["login"])."' AND
user_haslo = '".htmlspecialchars($_POST["haslo"])."'";
if ($_SESSION["zalogowany"]!=1) {
if (!empty($_POST["login"]) && !empty($_POST["haslo"])) {
if (mysql_num_rows(mysql_query($zapytanie))) {
mysql_close();
$_SESSION["zalogowany"]=1;
header ('Location: index.php');
exit();
}
else ShowLogin('Nieprawidłowe dane.');
}
else ShowLogin();
}
else {
function loguj($login) {
$_SESSION['login'] = $test['login'];
}
header ('Location: index.php');
exit();
}
zrobiłem coś takiego… a później w osobnym pliku php mogę dać np. coś takiego…? tylko coś pominąłem, prawda?
echo $_SESSION['login'];
dodam, że jestem początkującym
crew1
(L337 Crew)
28 Marzec 2008 12:09
#4
W tym wypadku definiowanie funkcji zależnej od warunku nie ma najmniejszego sensu
function loguj($login) {
$_SESSION['login'] = $test['login'];
}
Możesz od razu dać $_SESSION[‘login’] = $test[‘login’]; itd.
Tylko mnie chodziło o globalną obsługę sesji - by cały kod obsługujący logowanie był w stanie sprawdzić czy w danym momencie user jest zalogowany.
Tak, pominąłeś - w nagłówku pliku musi się znaleźć session_start();
kid_m
(kid_m)
28 Marzec 2008 12:46
#5
dlaczego “to nie działa”…?
wklejam fragmenty kodu…
1.php
<?php ob_start();
session_start();
session_register('zalogowany');
if ($_SESSION['zalogowany']==1) {
$_SESSION['nick']=$_POST['login'];
header ('Location: index.php');
exit();
}
ob_end_flush(); ?>
2.php
<?php ob_start();
include 'ramy.php';
session_start();
session_register('zalogowany');
if ($_SESSION['zalogowany']==1) {
echo $_SESSION['nick'];
echo "Wyloguj mnie.";
}[/code]
proszę o podpowiedź.