« 1 2 »
Autor Zpráva
mm-marek
Profil *
zdravím,
už se to tu několikrát řešilo, ale nenašel jsem nic co by mi pomohlo.

Potřebuju nějakou sekci kam se může po přihlášení. Ok, použiju autentifikaci pomocí hlaviček, heslo porovnám s databází... problémnastane s odhlášenim. Nějak se mi do toho nedaří přimontovat session.

potřebuju prostě aby se při obnovování neptalo na heslo, ale po klepnutí na "odhlásit" se to na heslo zeptalo.

díky...
rada_losik
Profil
Tak normalně buď zruš všechny session nebo jednoduše přepiš hodnotu která ti drží uživatele přihlášeneho. Kdyby třebas session se měl jmenovat ID tak dej:
$_SESSION["ID"] = ""
To by mohlo fungovat myslím;)
mm-marek
Profil *
jj já vím jak se uvolní a zničí session.
ale bohužel nevím jak to prostě udělat: "umím udělat maltu, ale zeď mi pořád padá" :)

potřebuju princip, postup, nebo tak něco...
krteczek
Profil
pokud použiješ autentifikaci pomocí hlaviček ( chápu to takhle: $_SERVER["PHP_AUTH_USER" a $_SERVER["PHP_AUTH_PW"] tak už nepotřebuješ sesion, protože si prohlížeč pamatuje přihlášení.
přesný návod, a vysvětlení jak se přihlašovat a odhlašovat pomocí http autentifikace je na: http://www.blackhole.sk/readme.php?id=32

ten odkaz tu už kdysi byl, a já si ho založil takže posílám dál. (hodně špatně se to hledá, když člověk neví co přesně chce :-/
krteczek
krteczek
mm-marek
Profil *
jj ten odkaz sem našel na gůglu. a to je právě problém, chvi do toho zabudovat i to, aby se šlo odhlásit. A právě protože si prohlížeč pamatuje přihlášení... prostě k tomu co odkazuješ přidat odhlášení....
krteczek
Profil
no když na to koukám, tak pokud to není banka, obchod, a cokoliv podobného tak by stačilo přihlašování pomocí cookies s tím, že v cookii se uchovává md5 has nebo crypt hesla, popřípadě i jména (třebas sečtene) a odhlášení stačí provést tak že se nastaví opět cookie tentokrát prázdná, a nastaví se jí expirace v době nastavení (-1), myslím že je to dostatečné zabezpečení.
ano jde odchytnout přenos, tak by se přihlašování provedlo pod https a celý další provoz by byl pod tímto protokolem až do odhlášení
(jde namítnout že i tento přenos jde odchytnout ( nějak? ) a 128 bitovou šifru dekodovat... v realnem čase??? :-D
pokud budou hesla v databázi jen ve formě hashe hesla a heslo samotné bude znát jen uživatel, kde vezmete jistotu že ho někomu neprozradí???
prostě bezpečnost? ANO
paranoa? ANO ale umírněná :-)
krteczek
mm-marek
Profil *
jj to by šlo....

ale stejně mi to nedá. když budu zadávat heslo pomocí http autentifikace nejde se odhlásit? přece to nějak musí jít? protože když už to budu dělat pomocí cookie (bez header autentifikace) můžu to heslo rovno porovnávat s databází a na cookie se vykašlat ne?
krteczek
Profil
no já to myslel tak že httpauth nepoužiješ, a vlastně ani session, stačí ti prostě jen cookie ( blbe je to že uživatel je musi mít zaple ), což ale v podstatě na serveru se zakázaným ukládáním sessions vyjde nastejno, to se dá řešit nějak tak že si ty sessions vygeneruješ a uložíš sám ( nenecháš to generování a správu sessions na serveru ) někam do adresáře. myslím že na intervalu byl někde takový článeček, ale už nevím o co přesně se jednalo ( snad fotogalerie??? )
krteczek
PS: podle reakcí na ten článek na blackhole to přihlašování pomocí httpauth není to nejlepší řešení. mužeš to skusit tak že tomu $_SERVER["PHP_AUTH_USER"] vnutíš prázdnou proměnnou
$_SERVER["PHP_AUTH_USER"]="";

$_SERVER["PHP_AUTH_PW"]="";
//a odeslat hlavičku 401
Header("HTTP/1.0 401 Unauthorized");

ale jak říkám (píšu) není to nic pořádného
krteczek
mm-marek
Profil *
ještě mě napadla jedna věc, co takhle po přístupu uložit do databázr čas(přihlášení). při obnovování stránek vše půjde protože to bude přes tu http autentifikaci. zárověň se ale bude kontrolovat ten čas. a třeba po hodině už to nepustí- dijde k odhlášení...

v databázi bych měl tedy u každýho uživatele jméno, příjmení atd a taky čas poslrdního logování.

co vy na to? z pohledu praktičnosti, ale taky vezpečnost? principielně...
krteczek
Profil
nedělej to přes http-autentifikaci pokud to není vyloženě nutné ( pak bych to řešil šifrovaným přenosem pomocí ssh => https ), ale nejsem odborník na hlavičky, ono funguje přihlášení https a udžování pomocí cookies ( cookie se přenášejí šifrovaně ), takže ten problém s odchycením přihlašovacích udaju je mimo...

ALE !!! JE TO NESROVNATELNĚ POMALEJŠÍ PŘENOS NEŽ NEZABEZPEČENÝ, PRÁVĚ PROTO, ŽE SE MUSÍ ŠIFROVAT A DEŠIFROVAT, COŽ ZABERE NĚJAKÝ ČAS

krteczek
mm-marek
Profil *
co je špatně na http-autentifikaci? mě přijde bezpečnější jak přihlašování formulářem...

a https asi ne, ta aplikace bude dsot komunikovat s uživatelem. takže jestlim to je výrazně pomalejší nemá to smysl...
mm-marek
Profil *
tak to mam takhle:


<?
$time = time();
if (!isset($PHP_AUTH_USER)) // pokud neexsistuje $PHP_AUTH_USER provádí se tato větev scriptu
{

Header("WWW-Authenticate: Basic realm=\"denik\"");
Header("HTTP/1.0 401 Unauthorized");
echo "Neautorizovaný přístup";
exit;
}
else // jinak se provádí tato větev
{
// nebudeme ukládat do cache
Header("Cach-Control: no-cache");
Header("Expires:".GMDate("D, d M Y H:i:s")."GMT");
Header("Pragma: No-cache");
// provedeme kontrolu hesla

include ("config.php");

@$spoj = mysql_connect (SQL_HOST,SQL_USERNAME,SQL_PASSWORD);
if (!$spoj):
Header("Location: error_databaze.php");
else:

@$dat = MySQL_Select_DB(SQL_DBNAME);
if (!$dat):
Header("Location: error_databaze.php");
else:




$cas = MySQL_Query("SELECT cas FROM users WHERE pass='$PHP_AUTH_PW' AND jmeno='$PHP_AUTH_USER'");
$update_time = MySQL_Query("UPDATE users SET cas=$time WHERE jmeno='$PHP_AUTH_USER'");

while ($zaznam = MySQL_Fetch_Array($cas)):
$casovac=($zaznam["cas"])+30;
$cashodina = (time());
if ($casovac<$cashodina):

Header("WWW-Authenticate: Basic realm=\"denik\"");
Header("HTTP/1.0 401 Unauthorized");
echo "Neautorizovaný přístup - odhlášení";
exit;
endif;
endwhile;




$pocet = MySQL_Num_Rows($cas);
if ($pocet==0): //naslo se neco
Header("WWW-Authenticate: Basic realm=\"denik\"");
Header("HTTP/1.0 401 Unauthorized");
echo "Neautorizovaný přístup - špatně zadané jméno a/nebo heslo";
exit;
endif;




echo "jsem tu";
$update_time2 = MySQL_Query("UPDATE users SET cas=$time WHERE pass='$PHP_AUTH_PW' AND jmeno='$PHP_AUTH_USER'");




endif;//if pro databazi
endif;//if pro connect


}//exsistuje $PHP_AUTH_USER
?>
Raz
Profil *
také řeším problém s cookies a nějak mi to ne a ne udělat abych zůstal přihlášen i po zavření okna
Vojtech
Profil *
mam takovy dotaz, chtel bych zalozit web, ktery by se skladal z html ... ale byly by tam i nejaky ty prvky z php ... napr. mel bych menu a tam nejaky ty odkazy ... pod menu by bylo okenko pro prihlaseni typu prihlasovaci jmeno ... pass...login (proste klasika) a potom co by se urcity clovek prihlasil, tak by se mu v menu objevili nejaky odkazy navic ,napriklad pridani novinek atd... proste sekce pro registrovane (nechci pouzit RS)... Pote bych chtel udelat pridavani novinek, tak aby se mi po kliknuti na odkaz pridani novinek objevil formular napr. Predmet a zprava a kdyz to poslu, tak aby se to ukazalo v novinkach ...


Nevite nekdo jak na to? uz sem se to zkousel najit, ale bohuzel nemam zadne zkusenosti s PHP (pouze html, trochu javascript a trochu flash), takze kdyby byl nekdo tak hodny a poradil mi :)
Dekuju Vojtech
Str4wberry
Profil
Vojtech
„nechci pouzit RS […] ale bohuzel nemam zadne zkusenosti s PHP“
Když nemáš zkušenosti, tak proč se bránit RS?

Můžeš se podívat na „Stavíme portál na Linuxsoftu“. Věci, které popisuješ bys tam měl nají.
Vojtech
Profil *
diky za radu podivam se tam ...
jinak rs nechci pouzit, protoze ten web bych chtel mit z casti v html, protoze uz mam rozmysleny jak to bude vypadat atd... :) jen bych tam chtel mit tyhle vychytavky

Hlavne se s nekym musim poradit jak to zadelat do toho html, tak aby to chodilo . :)
gembler
Profil *
Mohl by mi někdo poradit?....mám web, který se skádá v podstatě z jedné stránky index.php?stranka=neco. Zárověn tam mám přihlašovací formulář, který je pomocí include nahráván na všechny stránky stejně. Teď mám však problém s tím, že když se jednou přihlasím tak mi to sice vydrží na všech stránkách ale pak se odhlásím a když prejdu na jinou stranku tak me to samo zase prihlasi. Nevíte někdo co stim?
tiso
Profil
gembler - spraviť správne to prihlásenie - zmazať COOKIE alebo zrušiť SESSION pri odhlasovaní.
gembler
Profil *
tiso - to už jsem zkoušel, všechno možný ale pořád to nefunguje. Ještě jsem chtěl dodat já mám ten web dělanej tak, že ten obsah stranek co je všude stejnej mam danej každej zvlast v souboru (třeba anket, přihlašovací formulař...) všechno ve zvlaštním souboru a potom každá moje stanka je vlastně index kterej ma 7 stejnych souboru (pomoci include nahranych) a 1 soubou (taky pomoci include ) a ten jedinej se meni na tech strankach. Takže já to přihlašování dělám jen v tom jednom souboru i session kontroluju jen v tom neměnnym souboru) . A tak nevim zda to na to odhlašení nemá nějakej vliv.
P.S. nevím jesi jsi pochopil co teď myslim kdyžtak napiš dík
tiso
Profil
gembler - ešte jedna vec - musíš zakázať cachovanie stránok - nastavením správnych hlavičiek (funkcia header). Inak môže byť probém už iba v logike skriptu.
gembler
Profil *
tiso-mužeš mi to cachování nějka líp vysvětil?
tiso
Profil
gembler - http://www.jakpsatweb.cz/clanky/caching-tutorial-czech-translation.htm l
gembler
Profil *
tiso - dík ale stejně mi to pořád nefunguje. Kdybych ti poslal ten soubor myslíš , že by jsi se na něj mohl podívat?
tiso
Profil
gembler - mám inú robotu momentálne...
gembler
Profil *
tiso - tak jindy?
tiso
Profil
gembler - prečo to nehodíš sem aby ti niekto pomohol? Nie som tu jediný... Alebo mi to pošli cez form na stránke, viď profil.
gembler
Profil *
Toto je můj kód na přihlašování. Prosím poraďte někdo, kde je chyba. děkuju
<?php

$odhl=$_POST["odhlaseni"];
if ($odhl)
{
session_start();
session_destroy();
echo "jsem odhl";

$submit=$_POST["submitek"];
if ($submit)
{
$nick_p=htmlspecialchars(wordwrap($_POST["nick_p"],40,"\n",1));
$heslo_p=htmlspecialchars(wordwrap($_POST["heslo_p"],40,"\n",1));
$mysql=mysql_connect("mysql.neco","ic_neco","heslo"); //ty udaje nejsou platné
mysql_select_db("ic_g_music",$mysql);
$vysledek_p=mysql_query("select * from `uzivatele` where `nick`='$nick_p'");
$zaznam_p=mysql_fetch_array($vysledek_p);
if ($zaznam_p!="")
{
$heslo_spravne=$zaznam_p["heslo"];
$nick_spravny=$zaznam_p["nick"];
if (($heslo_spravne==$heslo_p) or ($_session["prihlasen"]==$nick_p))
{
echo "Přihlášen";
session_start();
/*session_register("prihlasen");*/
$_session["prihlasen"]=$nick_p;
echo "<h1>Uživatel</h1><div id=\"posmi\">".$_session["prihlasen"]."</div><center><form action=\"index.php\" method=\"post\"><input type=\"submit\" value=\"Odhlásit\" name=\"odhlaseni\" style=\"width: 90px;background-color:#800000; border: 2px solid #FDF117;color: #FDF117\"></form></center>";
mysql_close($mysql);
}
else
{
echo "Špatný heslo";
session_start();
$_session["prihlasen"]=0;
}
}
else
{
echo "Uživatel neexistuje";
session_start();
$_session["prihlasen"]=0;
}
}
echo "<h1>Přihlášení</h1>
<form action=\"index.php\" method=\"post\">
<div id=\"posmi\">Nick</div>
<center>
<input type=\"text\" name=\"nick_p\" value=\"\" size=15 style=\"background-color: #800000;color: white; border: 2px solid #FDF117;\">
</center>
<div id=\"posmi\">Heslo</div>
<center>
<input type=\"password\" name=\"heslo_p\" value=\"\" size=15 style=\"background-color: #800000;color: white; border: 2px solid #FDF117;\">
</center> <br>
<center>
<input type=\"submit\" value=\"Přihlásit\" name=\"submitek\" style=\"width: 90px;background-color:#800000; border: 2px solid #FDF117;color: #FDF117\">
</center>
</form>
<br>";
}

else
{

echo "<h1>Uživatel</h1><div id=\"posmi\">".$_session["prihlasen"]."</div><center><form action=\"index.php\" method=\"post\"><input type=\"submit\" value=\"Odhlásit\" name=\"odhlaseni\" style=\"width: 90px;background-color:#800000; border: 2px solid #FDF117;color: #FDF117\"></form></center>";
}
?>
tiso
Profil
...no ty koki...

1. prečo odhlasuješ formulárom keď to ide odkazom (GET premennou)?
2. prečo kopíruješ premenné z formulárov do svojich premenných? Lepišie a prehadnejšie je pracovať priamo s nimi a testovať ich existenciu (isset, !empty)
3. chyba je v logike skriptu, if{if{if{if{ }}}} ho prerob na if{}elseif{}elseif{}else{}
gembler
Profil *
tiso - to nejde přepsat na
if{}elseif{}elseif{}else{} to by uplně změnilo význam těch původních
if{if{if{if{ }}}}
tiso
Profil
gembler - vlož na začiatok skriptu tento kód: error_reporting(E_ALL);
A daj vedieť čo to všeko robí/nerobí.
« 1 2 »
Toto téma je uzamčeno. Odpověď nelze zaslat.