Autor Zpráva
Radim24
Profil *
Ahoj. Dělal jsem si sám přihlašování ale asi jsem nalezl chybu a tak se chci zeptat jak to udělat, aby mi už tento problém nevyskakoval. Do tabulky v db jsem zapsal tyto údaje:

sessid='f5467b0683f28e3a36149f023c9a4c80', ip='127.0.0.1', id='43', nick='', logtime='1216703460'

Problém je v tom, že jsem sessid vztv85el takto>

function start_session()
{
global $links,$refs;
session_id(md5($_SERVER["REMOTE_ADDR"].$links["webname"])); session_start();
db_connect(true);
}

Když změním název adresáře (např. přesun, zkopírování), tak se uživatel nepřihlásí, protože dojde k chybě. Jelikož se změní název adr. tak se změní i sessid. A to sessid je primární klíč, takže nelze zapsat stejné id uživatele s jiným session. Asi jsem to udělal blbě a mělo by být id user primary. Otázka z čeho mám udělat název sessid. to musí být přece jedinečné, aby to nepletlo dva uživatele dohromady...
Radim24
Profil *
Nebo mám předělat tu podmínku WHERE ve funkci ?

CASE "UPDATE": // na sessid nelze spoléhat - mohou být na jednom pc přihlášení dva různí lidé - teoreticky
@$result = MySQL_Query("UPDATE sessions SET $_session WHERE id='".$user["id"]."';");
die($_session."");
$result==false ? ex("Nepovedlo se přihlásit klienta") : "";
// if ($session_change<>"NOT_REGISTERED") $session_change = sessions_service($check_access);
BREAK;
WertriK
Profil
Otázka z čeho mám udělat název sessid
Fce session_start(); vygeneruje ten retězec sama(pokaždé jiný).
Radim24
Profil *
Aha, tak to bylo zbytečné...
Radim24
Profil *
Takže jedinečný sloupec má být id user? A jakou podmínku mám dát do toho UPDATE?

$result = MySQL_Query("UPDATE sessions SET $_session WHERE id='".$user["id"]."';");

Co když tam vzniknou ty dva sessiony když změním adresář, poradíš mi? Dík
WertriK
Profil
Co když tam vzniknou ty dva sessiony když změním adresář

Jaký adresář myslíš ? Resp. proč měnit nějaký adresář ? K čemu adresář ?

$result = MySQL_Query("UPDATE sessions SET $_session WHERE id='".$user["id"]."';");

Tohle ti nebude fungovat, takhle nějak spíš
MySQL_Query("UPDATE sessions SET session = '".$_session."' WHERE id='".$user["id"]."';");


A proč vůbec ukládáš session do db ?
Radim Hejhal
Profil
Ahoj,
celé to tvoje řešení mi přijde prapodivný, celá ta tabulka v DB mi přijde zbytečná. Protože v ní nevidím heslo uživatele, předpokládám že to máš v jiné tabulce spolu s ostatními údaji. Být tebou, udělám to celé znova s novým návrhem. Mě nejjednodušší přijde asi tohle, ale způsobů je víc:

Tabulka v databázi: id (primární), uzivatel (unikátní jestli chceš), heslo (zahashované), [další volitelné údaje]
Session: uzivatel, cas posledni aktivity, IP (jeslti chceš)
PHP script - přihlášení: Zkontroluje v DB, jestli sedí jméno a heslo, zavolá session_start(); Zapíše do session potřebné věci. Session ID se samo uloží do cookies u uživatele, to není třeba řešit.
PHP script - ověření: zavolá session_start(); čímž se mu zpřístupní proměnné v session daného uživatele (sám si zjistí správnou session z cookies, netřeba řešit). Zjistí jméno uživatele, zkontroluje IP, zkontroluje jestli uživatel nebyl moc dlouho neaktivní a zapíše nový čas poslední aktivity.

A není problém třeba ukládat do databáze i čas přihlášení, do session práva uživatele apod.
Radim24
Profil *
Bavil jsem se o tom s koderem přes ICQ a dospěl jsem k závěru, že musím nastavit primary key na user_id a před updatem session zkontrolovat zda tam neexistuje dbakrát stejné user_id. Jinak při změně umístění hlavního adresáře (stránek) dojde k vytvoření duplicitního session. Teď akorád nevím zda mám volat fnc session_id(), zda je to nutné, nebo stačí session_start()

function start_session()
{
global $links,$refs;
// session_id(md5($_SERVER["REMOTE_ADDR"].$links["webname"]));
session_start();
db_connect(true);
}
Radim24
Profil *
Nepracuji s cookies, podle mě je lepší pracovat se sessions na DB, je to i bezpečnější, uživatel nemusí mít zapnuté cookies. Jsem na to zvyklý a příjde mi to mnohem snadnějí a přehlednější. Říkám to proto, že dříve jsem to cookies používal, ale omezovalo mě to a vůbec se mi s tím blbě pracovalo.
Radim24
Profil *
$result = MySQL_Query("UPDATE sessions SET $_session WHERE id='".$user["id"]."';");

Tohle ti nebude fungovat, takhle nějak spíš

MySQL_Query("UPDATE sessions SET session = '".$_session."' WHERE id='".$user["id"]."';");


Proč myslíš, ty víš to kje v tom $_session? Je to již předem sestavený řetězec. A funguje skvěle.
Radim24
Profil *
No s těmi sessions je to zábava. Tak nejdříve mi lidi říkaj, že se diví proč to používám. Dříve mi to někdo tady doporučoval. Někdo mi řekl, že to bude významně zpomalovat aplikaci, protože se na každé stránce musím přihlašovat. Ale ptal jsem se svého poskytovatele, a ten mi na můj dotaz odpověděl, že při těch cca 4 sloupcích a cca 10-20 lidech online, je to v pohodě. Takže nevím v čem vidíte problém.
Jack06
Profil
Máš blbě uspořádanou DB. Opravdu taky doporučuju předělat. vůbec sessiony neukládej. Ty se pořád mění, nikdy nebudou 2 stejný session. A tím že je ukládáš to zbytečně ztěžuješ protože je v db nevyužiješ.
Radim24
Profil *
Už jsem to předělal, mám primární klíč na id_user. Vůbec nevím proč jsem to tak blbě nastavil, měl jsem to původně dobře...
Jack06
Profil
Ok tak to je fajn LOCK

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: