| Subiectul anterior :: Subiectul următor |
| Autor |
Mesaj |
delete
Data înscrierii: 25/Ian/2005
Mesaje: 18
|
| Trimis: Lun Feb 21, 2005 10:56 pm Titlul subiectului: sesiuni php |
|
|
ma scuzati daca s-a mai discutat despre chestia asta....am mai cautat pe forumul asta si am gasit cate ceva dar inca nu sunt lamurit...
dupa ce verific daca parola coincide cu cea din baza dau session_start()...
si imi umple un ecran cu erori....ceva de genu
Warning: session_start() [function.session-start]: open(/tmp\sess_8e0f2ee7c1865fb9fa46d675c0223258, O_RDWR) failed: No such file or directory (2) in c:\apache\htdocs\autentificare.php on line 4
Warning: session_start() [function.session-start]: Cannot send session cookie - headers already sent by (output started at c:\apache\htdocs\autentificare.php:4) in c:\apache\htdocs\autentificare.php on line 4
si inca vreo 4 mesaje de astea
folosesc php 4.3.1 si apache...in windows...
poate nu am configurat bine php-ul...ceva idei?
si in legatura cu aceste sesiuni...
eu pornesc o sesiune cu session_start() si doar atat trebuie sa fac?
daca utilizatorul stie numele paginii html pe care nu l-ar putea accesa fara a se avea un user si o parola cum stie php sa nu afiseze acea pagina?
mi-ar prinde bine niste link-uri spre ceva documentatie eventual.... |
|
| Sus |
|
johnutz
Data înscrierii: 20/Iul/2004
Mesaje: 956
Locație: Între scaun și tastatură
|
| Trimis: Mar Feb 22, 2005 9:22 am Titlul subiectului: |
|
|
Asa e, nu l-ai configurat corect.
In php.ini ai linia Cod: session.save_path = /tmp De-aia zice ca a vrut sa deschida /tmp\sess_....
Pune si tu un director acolo care exista.. |
|
| Sus |
|
boo
Data înscrierii: 24/Mar/2004
Mesaje: 223
Locație: Ploiesti
|
| Trimis: Mar Feb 22, 2005 12:10 pm Titlul subiectului: |
|
|
Mai exact in php.ini trebuie sa ai linia asta:
Cod: session.save_path = "C:\windows\temp"
asa folosesc eu pe windows 98.
In al doilea rand, tot ceea ce declari perin session_start(), tebuie sa fie pe prima linie.
Cum stie php sa nu afiseze pagina cutare.php daca userul nu este logat?
Pai in primul rand in momentul in care se logheaza, pornesti o sesiune si faci un UPDATE la sesion_id din randul in care userul parola si session_id al userului care tocmai s-a logat (daca le ai), dupa care urmezi o instructiune if si verifici daca session_id este acelasi cu session_id sin baza de date, daca nu il intorci la pagina de logare. Nu stiu daca ai inteles mare lucru insa in mare cam asta ar fi.
Bafta |
|
| Sus |
|
delete
Data înscrierii: 25/Ian/2005
Mesaje: 18
|
| Trimis: Mar Feb 22, 2005 12:16 pm Titlul subiectului: |
|
|
mersi boo
am inteles ce ai zis...dar din cate am inteles eu ar mai trebui un camp in baza de date unde sa inregistrez sesionid-ul userului.
nu?
si inca ceva:
in acel if... ce verific?ce variabila? |
|
| Sus |
|
boo
Data înscrierii: 24/Mar/2004
Mesaje: 223
Locație: Ploiesti
|
| Trimis: Mar Feb 22, 2005 12:42 pm Titlul subiectului: |
|
|
| <? session_start();
//chestia asta o faci in momentul in care se logheaza (apasa SUBMIT).
// aici faci conectarea la baza de date
// tot aici daca userul se logheaza iar userul si parola sunt bune faci un update la campul session_id
while($row = mysql_fetch_array($query)){
if($row['user'] == $_POST['user'] AND $row['pass'] == $_POST['pass']){
$_SESSION['key_user'] = session_id();
$sql = 'UPDATE _tabel_ SET session_id="'.$_SESSION['key_user'].'" WHERE user="'.$_POST['user'].'" AND pass="'.$_POST['pass'].'"';
$query = mysql_query($sql);
if($query) echo 'Sunteti logat ca: '.$_POST['user'].' acum puteti vedea orice pagina';
}
}
?>
<? session_start();
//asta este pentru orice pagina care vrei sa fie accesata doar in momentul in care este logat
// aici faci conectarea la baza de date
function intoarce_la_login(){
header("location: login.php"); // daca nu este logat il intorci la pagina de login
}
while($row = mysql_fetch_array($query)){
if ($_SESSION['key_user'] != $row['session_id']) {
intoarece_la_login();
exit;
}
}
?> |
|
| Sus |
|
delete
Data înscrierii: 25/Ian/2005
Mesaje: 18
|
| Trimis: Mar Feb 22, 2005 8:03 pm Titlul subiectului: |
|
|
boo
am incercat cum ai zis si nu imi merge
treaba sta in urmatoru fel:
in primul rand imi da eroare cand folosesc mysql_fetch_array(poate pt ca am php 4.3.1)
am un fisier autentificare.html
aici am user si parola si un buton submit
<form action="autentificare.php" method="POST" >
apoi autentificare.php
aici verific daca parola si useru coincid cu cele inregistrate in baza de date.
ceva de genu:
//---verificare existenta user si parola----
$result=mysql_query("SELECT user FROM baza_de_date WHERE user='".$_POST["user"]."' ",$link);
$check_nick+=mysql_num_rows($result);
$result=mysql_query("SELECT parola FROM baza_de_date WHERE parola='".$_POST["parola"]."' ",$link);
$check_parola+=mysql_num_rows($result);
si in functie de cele 2 variabile ... se hotaraste daca inregistrarea exista
intrebarile sunt:
unde trebuie pus session_id();in ce fisier....
am incercat sa pun in primul dar am observat ca nu face nimic
apoi functia aia...trebuie sa fac un fisier...care sa il includ in fiecare pagina care vreau sa fie verificata(user si pass) inainte sa poata fi vizualizata?
si de ce nu imi merge mysql_fetch_array()?
scuze pentru mesaju mare |
|
| Sus |
|
boo
Data înscrierii: 24/Mar/2004
Mesaje: 223
Locație: Ploiesti
|
| Trimis: Mar Feb 22, 2005 9:48 pm Titlul subiectului: |
|
|
Pai tu ai pus scriptul chiar asa cum l-am scris eu acolo? Asta era un mod de a-ti arata cum stau lucrurile, daca te uiti in primul rand mie imi lipseste conectarea la baza de date, comada SQL, executarea ei... asta ca sa simplific lucrurile si sa trec direct unde te doare.
Cred ca d-asta iti dadea eroare la mysql_fetch_array
Citat:
//---verificare existenta user si parola----
$result=mysql_query("SELECT user FROM baza_de_date WHERE user='".$_POST["user"]."' ",$link);
$check_nick+=mysql_num_rows($result);
$result=mysql_query("SELECT parola FROM baza_de_date WHERE parola='".$_POST["parola"]."' ",$link);
$check_parola+=mysql_num_rows($result);
Ce faci tu aici? In primul rand ar trebui sa ti la securitatea informatiilor din baza de date si sa le introduci criptate in MD5, in al doilea rand uita-te pe ultima linie ($check_parola+=mysql_num_rows($result);), poate un user are aceeasi parola cu un altul. Ce ai facut tu acolo eu as putea sa fac asa:
<? session_start()
// userul si parolele le ti criptate in baza de date
// NU UITA SA FACI CONECTAREA LA BAZA DE DATE
$sql = 'SELECT * FROM baza_de_date WHERE user='.md5($_POST[user]).' AND parola='.md5($_POST[pass]).';';
$query = mysql_query($sql);
if(mysql_num_rows($query)==1){
// aici urmeaza chestia care ti-am spus-o mai sus
while($row = mysql_fetch_array($query)){
if($row['user'] == md5($_POST['user']) AND $row['pass'] == md5($_POST['pass'])){
$_SESSION['key_user'] = session_id();
$_SESSION['user'] = $_POST['user'];
$_SESSION['pass'] = $_POST['pass'];
$sql = 'UPDATE _tabel_ SET session_id="'.$_SESSION['key_user'].'" WHERE user="'.md5($_POST['user']).'" AND pass="'.md5($_POST['pass']).'"';
$query = mysql_query($sql);
if($query) echo 'Sunteti logat ca: '.$_POST['user'].' acum puteti vedea orice pagina';
}
}
}
?>
Asta este ceea ce pui in pagina autorizare.php
Citat: unde trebuie pus session_id();in ce fisier.... ?
Dupa cum vezi am facut asta in autorizare.php, am atribuit valoarea lui session_id() variabilei $_SESSION['key_user'] care o trazmit in pagina urmatoare prin apelarea lui session_start().
Citat: am incercat sa pun in primul dar am observat ca nu face nimic
Este normal sa nu faca "nimic", daca vrei sa vezi rezultatul fa un test simpul, faci o pagina in care pui asa:
<? session_start();
echo session_id();
?>
...si ai sa vezi ce face acel session_id (inchide pagina si deschide-o din nou, session_id nu mai este ca cel de din-naite).
Citat: apoi functia aia...trebuie sa fac un fisier...care sa il includ in fiecare pagina care vreau sa fie verificata(user si pass) inainte sa poata fi vizualizata?
Functia "aia" este defapt asta:
<? session_start();
function intoarce_la_login(){
header("location: login.php");
}
// NU UITA SA FACI CONECTAREA LA BAZA DE DATE
$sql = 'SELECT * FROM baza_de_date WHERE user='.md5($_SESSION[user]).' AND parola='.md5($_SESSION[pass]).';';
$query = mysql_query($sql);
while($row = mysql_fetch_array($query)){
if ($_SESSION['key_user'] != $row['session_id']) {
intoarece_la_login();
exit;
}
}
?>
Functia asta o incluzi in fiecare pagina pe care vrei sa nu o accesezi decat in momentul in care esti logat.
Chiar ai inteles ceva din ce am zis eu? Daca as fi in locul tau si mi-ar explica cineva asa ceva sigur cautam x-ul din coltul sus al browserului :D |
|
| Sus |
|
delete
Data înscrierii: 25/Ian/2005
Mesaje: 18
|
| Trimis: Mie Feb 23, 2005 11:03 am Titlul subiectului: |
|
|
nu am criptat parola si useru pentru ca este un proiect personal....si se mai poate modifica...
mersi mult pt reply....mi-a fost de mare ajutor.... :wink:
am inteles eu in mare asa.... |
|
| Sus |
|
delete
Data înscrierii: 25/Ian/2005
Mesaje: 18
|
| Trimis: Lun Feb 28, 2005 9:26 pm Titlul subiectului: |
|
|
ok....am reusit sa fac ceva dar mai am o intrebare...
am aici fisierul autentificare.php
nick si parola le trimit cu POST la autentificare_sc1.php
apoi fisierul autentificare_sc1.php care arata cam asa:
<?
session_start();
$db=mysql_connect("localhost","root","") or die ("nu pot sa ma conectez!");
mysql_select_db("galerie",$db) or die ("nu pot selecta baza de date dorita!");
//verific nick si parola
$sql = "SELECT * FROM galerief WHERE nick='" .($_POST['nick']). "'AND parola='".($_POST['parola'])."'";
$query = mysql_query($sql,$db);
//$query1 = mysql_query($sql,$db);
if (mysql_num_rows($query)==1)
{
while ($row = mysql_fetch_array($query))
{
if ( $row['nick']==($_POST['nick']) AND $row['parola']==($_POST['parola']) )
{
$_SESSION['key_user'] = session_id();
$_SESSION['nick'] = $_POST['nick'];
$_SESSION['parola'] = $_POST['parola'];
$sql = " UPDATE galerief SET sesion_id='".($_SESSION['key_user'])."' WHERE nick='".($_SESSION['nick'])."' AND parola='".($_SESSION['parola'])."' ";
$query = mysql_query($sql,$db);
if($query) echo 'Sunteti logat ca: '.$_POST['nick'].' acum puteti vedea orice pagina';
}
}
}
?>
problema este:daca il rulez asa imi da urmatoarea eroare:
Sunteti logat ca: vali acum puteti vedea orice pagina
Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in c:\apache\htdocs\autentificare_sc1.php on line 13
ok.in schimb daca ii folosesc variabila $query1 in bulca while nu imi mai da nici o eroare ,cel putin pana unde am verificat eu.
care e explicatia? |
|
| Sus |
|
NDC
Data înscrierii: 19/Feb/2005
Mesaje: 127
|
| Trimis: Mar Mar 01, 2005 2:54 am Titlul subiectului: |
|
|
delete a scris: care e explicatia?
pai tu nu vezi ca variabila $query mai este folosita o data in interiorul lui while?? normal ca da eroare cand trebuie iar verificata bucla while, avand in vedere ca primul $query face o chestie si al doilea cu totul altceva, si interfereaza. |
|
| Sus |
|
LAurenZIO_4U
Data înscrierii: 04/Noi/2004
Mesaje: 93
Locație: Timisoara
|
| Trimis: Mar Mar 01, 2005 10:14 am Titlul subiectului: |
|
|
bodul pentru verificarea accesului in fiecxare pagina pe care l-ai bagat tu e bun dar nu e deloc weficient: De ce sa faca cate o interogare la MySQL de fiacare data cand userul acceseaza cate o pagina ? . msai bine baga codul asta:
if(isset($_SESSION['keyuser']) permite accesul;
else redirectare.
Sesiunea e un id unic, nu pot fi 2 user in acelasi timp cu acelasi id. |
|
| Sus |
|
LAurenZIO_4U
Data înscrierii: 04/Noi/2004
Mesaje: 93
Locație: Timisoara
|
| Trimis: Mar Mar 01, 2005 10:16 am Titlul subiectului: |
|
|
| Sorry pt. greselile gramaticale, tastatura e infecta :oops: |
|
| Sus |
|
delete
Data înscrierii: 25/Ian/2005
Mesaje: 18
|
| Trimis: Mar Mar 01, 2005 1:26 pm Titlul subiectului: |
|
|
deci...nu sunt eu prea meserias...dar cred ca e bine asa.... deoarece vreau ca anumite pagini sa nu poata fi vizualizate de oricine...
am facut interogarea la mysql pentru a fi sigur ca useru este autentificat...
unde cred ca gresesc....pot sa folosesc functia asta isset in locul functiei intoarce_la login sau ce vrei sa spui? |
|
| Sus |
|
PHPRomania Bot
Bot Member
Data înscrierii: 27/Dec/2007
Mesaje: 1
Locaţie: Server Google |
| Trimis: Mie Dec 26, 2007 7:01 pm Titlul subiectului: Ad |
|
|
|
|
|
| Sus |
|
| |