login

dělám si na svém webu takový malý rs, gb, komentáře atd. Zprovoznil jsme si script ktery uklada do db vsechyn potrebne udaje (id,jmeno, heslo,mail, web,icq,pohlavi,body) ale ted bych potreboval se nejak prihlasit, lae nevim jakym zpusobem bych ten login mel udelat, pls mate nejake tipy?
thx
SESSIONS. Po overeni zadaneho username a password z formulare zaregistruj nejakou session promennou a na kazde strance kontroluj, jestli je zaregistrovana (jestli je uzivatel prihlasen). Pro odhlaseni "odregistruj" tu session promennou. jednoduche, rychle.
Moje skripty:
=======================================
login.php
=========
<?php
require "initialize.php"; //session_start(), mysql_connect() atd;

$result = mysql_query("SELECT
users.id
FROM users
WHERE
prezdivka='$_POST[login]'
AND password=MD5('$_POST[heslo]')
LIMIT 1");

if (mysql_num_rows($result)) { // prihlaseni probehlo uspesne, tj. jeden zaznam v DB odpovida zadanym udajum z formulare
session_register("user_id"); // zaregistruje prihlaseni <== TO JE ONO
$_SESSION["user_id"] = mysql_result($result,0,0);
mysql_free_result($result);

$hlaska = "Přihlášení proběhlo úspěšně.<br />Pokračovat můžete výběrem některé položky z <strong>hlavního menu</strong>.\n\n";

mysql_query("UPDATE users SET users.last_login=UNIX_TIMESTAMP() WHERE users.id='$_SESSION[user_id]' LIMIT 1");
// tady jenom zapisuju timestamp posledniho prihlaseni toho cloveka.

}
else $hlaska = "Špatné uživatelské jméno nebo heslo.";


require_once('header.php'); // include zacatku stranky
echo $hlaska;
require('footer.php'); // include konce stranky
?>

=======================================
logout.php
=========
<?php
require('initialize.php'); // session_start() a mysql_connect atd.
session_unregister('user_id');
require('header.php'); ?>
Odhlášení proběhlo úspěšně.
<?php require('footer.php'); ?>


=======================================
logged_only.php
=========

to includuju na kazdou stranku, na kterou se uzivatel muze dostat jen po prihlaseni.

<?php
if (!session_is_registered("user_id")) {
require('header.php');
echo '<strong>Přístup odepřen</strong><br />';
echo 'Pro vstup do této zóny musíš být přihlášen(a).';
require('footer.php');
die();
}
?>
thx uz sjme to zprovoznil ale mam jeste jednu otazku, chtel bych nekde vypsat, kteri uzivatele jsou prave on-line, ale nevim jak by to slo udelat, nic me nenapada... :-(
do databaze pri kazdym pristupu na stranku ulozis zaznam, kde bude ID toho cloveka a aktualni timestamp a pak vyberes vsechny zaznamy (podle timestampu), ktere nejsou starsi nez cca 5 minut. Pokud to chces udelat i pro neprihlaseny, tak tam nedavej ID toho cloveka (zadny prece neznas), ale session id.
thx, ale zatim to radeji nebudu zkouset, ale mam este jednu otazku (snad posledni)
Do db take vypisuji jestli je uvedeny uzivatel admin nebo ne (nabyva hodnot 0 jestli ne a 1 jestli ano), ale nevim jak udelat script/funkci, aby poznalo jestli se ejdna o administratora, nejradeji bych to situoval jako nastavbu do session, ale to asi nepujde. pls jak to mate vyresene vy?
THX
Mno .. třeba já používám .. pouho pouhou podmínku if

<?php
if ($row[admin] == "1"){
echo "<a href="admin.php">Tajná stránka pro adminy</a>";
echo "<a href="user.php">Tajná stránka pro obyč. uživatele</a>";
} else {
echo "<a href="user.php">Tajná stránka pro obyč. uživatele</a>";
}
?>

Script vlastně zajistí .. to že pokud se někdo přihlásí a má hodnotu admina (tedy 1) tak se mu vypíše odkaz na stránku pro adminy .. v opačném případě se vypíše jen stránka pro obyčejné uživatele ..

Dále musím podotknout .. že nejsme žádné "lumy" a tak musíme zabezpečit i samotnou stránku "admin.php" protože by se klidně mohlo stát že někdo zadá do url www.jiripocta.wz.cz/admin.php a byl by v sekci pro adminy .. a to přece nechceme ..

zase se to dá řešit pomocí funkce if .. ale to už raději rozepisovat nebudu ..
sorry mám tam chyby ... zapoměl jsem na \

<?php
if ($row[admin] == "1"){
echo "<a href=\"admin.php\">Tajná stránka pro adminy</a>";
echo "<a href=\"user.php\">Tajná stránka pro obyč. uživatele</a>";
} else {
echo "<a href=\"user.php\">Tajná stránka pro obyč. uživatele</a>";
}
?>
vim, že se používá ještě šikovnější věc než jsou sessiony. už jenom proto, že sessiony mohou být, byť jsem o tom nevěděl, zakázané.
WHERE
prezdivka='$_POST[login]'

UFF .. to jako vazne?
24k:
ano, vazne. na puvodnim host-serveru (predpokladam, ze i na WZ) je magic_quotes_gpc=on, takze nevidim jedinou mezeru. BTW slo jen o ukazku principu. Pokud ti jde o celkovou presnost, staci doplnit radek

if (!get_magic_quotes_gpc()) $_POST['login']=addslashes($_POST['login']);
a pro jistotu klidne i
if (!get_magic_quotes_gpc()) $_POST['password']=addslashes($_POST['password']);


Z PHP manualu (http://mirrors.inway.cz/manual/cs/function.addslashes.php):
PHP direktiva magic_quotes_gpc je výchozím nastavení nastavena na on, což způsobí že funkce addslashes() bude použita na všechna data GET, POST a COOKIE. Nepoužívejte funkci addslashes() na řetězce, které již byly escapovány díky direktivě magic_quotes_gpc, jinak způsobíte dvojité escapování.