Jump to content

SUBIECTE NOI
« 1 / 5 »
RSS
Probleme timonerie schimbator sau...

Numar strada gresit in contractul...

Centrala Ariston Cares Premium 24...

La multi ani @Klasse!
 La multi ani @shmecherul!

pareri ipad 6-2018- flip

Cum au aparut supermarketurile in...

Campanii mincinoase Carrefour
 Tv toshiba defect

touchscreen navigatie stricat

bonsai - de unde?

Resetare Bonus Malus
 Unitatea optica DVD-rw absenta pe...

Problema configurare Wireguard

Dozatoare de apa, cu alimentare d...

Intarziere aterizare avioane
 

Rescriere URL-uri versus sesiuni

- - - - -
  • Please log in to reply
18 replies to this topic

#1
Berilac

Berilac

    Junior Member

  • Grup: Members
  • Posts: 192
  • Înscris: 28.11.2006
Salut!

Am un site unde mi-am facut un formular de logare (panoul utilizatorului).
Am incercat sa rescriu URL-urile din htaccess precum pe alte site-uri de-ale mele, insa, cand intru pe paginile rescrise nu se pastreaza sesiunile.

Deci intrebarea ar fi: cum pot face ca dupa rescrierea URL-urilor sa se pastreze sesiunile?  <_<

#2
B3aT

B3aT

    Member

  • Grup: Members
  • Posts: 749
  • Înscris: 02.03.2005
sesiunea se pastreaza atata timp cat esti pe site-ul respectiv, tu cred ca zici de o variabila gen &session=432787fdsjkh4hhksa432  ?

#3
Berilac

Berilac

    Junior Member

  • Grup: Members
  • Posts: 192
  • Înscris: 28.11.2006
Nu.
Eu am asa: o pagina numita jocuri.php pe care am redenumit-o in jocuri.

In pagina jocuri.php am:
<?php
if($_SESSION['id']!=session_id()) die();

/* continuare */
?>

Formular de logare are tot asa:
<?php
if($_SESSION['id']!=session_id()) // afisez formular
else // esti logat, fac diverse chestii
?>

Si daca intru pe jocuri sunt nelogat! Pe jocuri.php e OK... :(

Edited by Berilac, 25 July 2009 - 20:04.


#4
ciuly

ciuly

    dus cu pluta pe apa sambetei

  • Grup: Senior Members
  • Posts: 7,848
  • Înscris: 17.03.2004
ia sa ne mutam frumos pe programare sa inveti un pic de php inainte sa lucrezi la seo. eu as spune sa citesti frumos despre session, sa intelegi de face si cum functioneaza.

#5
urban

urban

    Active Member

  • Grup: Members
  • Posts: 1,622
  • Înscris: 25.07.2002
Ca sa verifici daca esti logat nu verifici id-ul de sesiune ci valoarea unei variabile salvata intr-o sesiune.

Ceva de genul:

if (user/pass corect) {
  // seteaza variabila de sesiune
  $_SESSION["isAuthenticated"] = true;
} else {
  // afisezi formularul de login
}
Si ca sa verifici daca e autentificat:

if ($_SESSION["isAuthenticated"]) {
  // afiseaza pagina pentru userul autentificat
} else {
  // redirect catre pagina de login
  header("Location: /login/");
}

Chestiile astea le gasesti cam in orice tutorial de php.

#6
Berilac

Berilac

    Junior Member

  • Grup: Members
  • Posts: 192
  • Înscris: 28.11.2006

 ciuly, on 25th July 2009, 22:45, said:

ia sa ne mutam frumos pe programare sa inveti un pic de php inainte sa lucrezi la seo. eu as spune sa citesti frumos despre session, sa intelegi de face si cum functioneaza.
Prietene, eu am facut jocuri si programe in PHP. ;)


 urban, on 26th July 2009, 17:02, said:

Ca sa verifici daca esti logat nu verifici id-ul de sesiune ci valoarea unei variabile salvata intr-o sesiune.

Ceva de genul:

if (user/pass corect) {
  // seteaza variabila de sesiune
  $_SESSION["isAuthenticated"] = true;
} else {
  // afisezi formularul de login
}
Si ca sa verifici daca e autentificat:

if ($_SESSION["isAuthenticated"]) {
  // afiseaza pagina pentru userul autentificat
} else {
  // redirect catre pagina de login
  header("Location: /login/");
}

Chestiile astea le gasesti cam in orice tutorial de php.
Eu asa am gasit intr-o carte faza cu verificarea aia cum am facut-o eu. Si, da, este o carte de PHP. De la editura Teora.
Daca as face cum ai spune tu ar insemna sa interoghez baza de date la fiecare afisare de pagina... Si mi-e sa nu depasesc max_questions ala... Ca am mai patit undeva.

Edited by Berilac, 27 July 2009 - 11:23.


#7
urban

urban

    Active Member

  • Grup: Members
  • Posts: 1,622
  • Înscris: 25.07.2002
Fara suparare dar eu in locul tau nu m-as lauda ca am facut jocuri si programe (programe!!!) in PHP daca dupa aceea vi si afirmi aberatii cum ca "mi-e sa nu depasesc max_questions ala". Si as vrea sa-mi demonstrezi si mie cum interoghezi tu baza de date la fiecare afisare de pagina folosind cel de-al doilea script presupunand ca ai inteles deja ca primul script se foloseste doar in pagina de login?

#8
Pac_Man

Pac_Man

    Senior Member

  • Grup: Senior Members
  • Posts: 2,258
  • Înscris: 10.12.2001

 Berilac, on 27th July 2009, 12:22, said:

Prietene, eu am facut jocuri si programe in PHP. ;)


Eu asa am gasit intr-o carte faza cu verificarea aia cum am facut-o eu. Si, da, este o carte de PHP. De la editura Teora.
Daca as face cum ai spune tu ar insemna sa interoghez baza de date la fiecare afisare de pagina... Si mi-e sa nu depasesc max_questions ala... Ca am mai patit undeva.

:roflmaofast:

Il inteleg pe Ciuly perfect cu postul asta!

Din cate imi amintesc cu configurarea default PHP, daca cookieurile nu sunt disponibile pe client, PHP incearca sa pastreze sesiunile folosind variabile prin request GET (adica variabile de forma &session=432787fdsjkh4hhksa432 in cadrul linkurilor, cum a spus B3at). In momentul in care ai rescris url-urile probabil ca ai pierdut acest parametru.
Oricum, session prin GET e o idee proasta, asa ca verifica ce se intampla acolo la tine...

Totusi, sesiunile s-ar putea sa fie in regula, problema e la "sistemul" tau de logare. Aplica ce te-a invatat urban mai intai ;)

#9
Berilac

Berilac

    Junior Member

  • Grup: Members
  • Posts: 192
  • Înscris: 28.11.2006

 urban, on 27th July 2009, 12:39, said:

Fara suparare dar eu in locul tau nu m-as lauda ca am facut jocuri si programe (programe!!!) in PHP daca dupa aceea vi si afirmi aberatii cum ca "mi-e sa nu depasesc max_questions ala". Si as vrea sa-mi demonstrezi si mie cum interoghezi tu baza de date la fiecare afisare de pagina folosind cel de-al doilea script presupunand ca ai inteles deja ca primul script se foloseste doar in pagina de login?
OK. Ma enervaze omul. Ca asa e pe forumuri. Vi si pui o intrebare si vin si sufera cu totii. De ce dracu' isi da ciuly cu parerea cum ca eu nu stiu PHP ? Afirmatii gratuite. PHP-ul e mare. Nu inseamna ca tre' sa le stii pe toate.

Referitor la programe, da, am facut programe in PHP!

Iar la faza cu logarea, greseala mea, nu am fost atent la postul anterior ca el verifica doar o variabila din sesiune daca este setata. Atunci intrebarea e alta: e sigura metoda aceasta ? Adica la logare setez o variabila in sesiune 1, iar apoi ca sa verific daca e logat verific doar daca acea variabila e 1 ? Eventual as mai adauga si IP-ul. Dar intrebarearea ramane.


 Pac_Man, on 27th July 2009, 13:52, said:

:roflmaofast:

Il inteleg pe Ciuly perfect cu postul asta!

Din cate imi amintesc cu configurarea default PHP, daca cookieurile nu sunt disponibile pe client, PHP incearca sa pastreze sesiunile folosind variabile prin request GET (adica variabile de forma &session=432787fdsjkh4hhksa432 in cadrul linkurilor, cum a spus B3at). In momentul in care ai rescris url-urile probabil ca ai pierdut acest parametru.
Oricum, session prin GET e o idee proasta, asa ca verifica ce se intampla acolo la tine...

Totusi, sesiunile s-ar putea sa fie in regula, problema e la "sistemul" tau de logare. Aplica ce te-a invatat urban mai intai ;)
Pai si, dupa tine, cine ar fi trebuit sa primeasca warn in cadrul acestui topic ?

 urban, on 26th July 2009, 17:02, said:

Ca sa verifici daca esti logat nu verifici id-ul de sesiune ci valoarea unei variabile salvata intr-o sesiune.

Ceva de genul:

if (user/pass corect) {
  // seteaza variabila de sesiune
  $_SESSION["isAuthenticated"] = true;
} else {
  // afisezi formularul de login
}
Si ca sa verifici daca e autentificat:

if ($_SESSION["isAuthenticated"]) {
  // afiseaza pagina pentru userul autentificat
} else {
  // redirect catre pagina de login
  header("Location: /login/");
}

Chestiile astea le gasesti cam in orice tutorial de php.
urban, am incercat codul tau. Chestia e ca daca rescriu URL-urile, o data merge, de doua ori nu. Adica o data ma vede logat, de doua ori nu.
Acum ce se intampla: pe fiecare pagina am inteles ca inainte de orice e bine sa incluzi:
<?php
	session_start();
	header ("Content-control: private");
?>

Este? Ma gandesc ca poate de acolo o fi ceva ce nu merge.

Edited by Berilac, 27 July 2009 - 13:44.


#10
adormitu

adormitu

    Member

  • Grup: Members
  • Posts: 384
  • Înscris: 28.08.2008

Quote

Eu am asa: o pagina numita jocuri.php pe care am redenumit-o in jocuri.
redenumit-o? fie incurci tu termenii, fie nu stii cum e cu url rewriteul.

#11
Berilac

Berilac

    Junior Member

  • Grup: Members
  • Posts: 192
  • Înscris: 28.11.2006
rescris-o...

#12
urban

urban

    Active Member

  • Grup: Members
  • Posts: 1,622
  • Înscris: 25.07.2002
1. Eu nu prea inteleg cum ai scris tu "programe" in php cand nu stii chestii de baza. E ca si cum m-as apuca eu sa spun ca sunt poet dar sunt paralel cu structurile literare din limba si literatura romana. De gramatica nu mai vorbesc. Daca pentru tine a downloada scripturi si a edita config.php inseamna ca ai facut programe atunci afla ca esti la fel de mecanic auto cum este baiatul de la peco care spala parbrizul, baga benzina si verifica presiunea la roti in timp ce clientii platesc.

2. De ce te complici cu ip-ul cand logica prezentata in scripturile mele este foarte simpla. Se vede treaba ca tot nu ai ascultat sfatul lui ciuly si habar n-ai ce este o sesiune si la ce foloseste ea. Altfel nu ati intreba tot felul de prostii pe aici. Spre luminarea ta .. o sesiune este unica si se refera la o conexiune temporara deschisa intre un browser si server-ul http. Odata inchis browser-ul sesiunea dispare (se distruge), orice alt browser deschis va creea o noua sesiune (cu un nou id .. desi asta nu are importanta din punctul tau de vedere). Poti chiar sa ai doua browsere (diferite) deschise de la acelasi computer conectate pe acelasi site si ambele vor avea sesiuni diferite. In cazul dat adresa de IP nu are nici o relevanta pentru ca insasi natura sesiunii face inutila utilizarea adresei de IP pentru controlul ei. Eu cam stiu la ce te referi tu dar confuzi anumite lucruri din cauza ca nu ai citit chestii de baza.

3. Daca nu pui tot codul de unde te astepti sa ghicim noi ce ai gresit tu acolo? Ca sa inteleg eu din "Adica o data ma vede logat, de doua ori nu." Cum testezi tu ca esti logat? Exista vreun script prin care resetezi sesiunea sau datele din sesiune? Stiai de exemplu ca inchiderea browserului sau resetarea serverului de http iti reseteaza si sesiunea? Eu spre exemplu as fi folosit al doilea script putin modificat:

if (!$_SESSION["isAuthenticated"]) {
  // redirect catre pagina de login
  header("Location: /login/");
}

// codul pentru utilizatorul autentificat

Si astfel imi dau seama ca nu sunt autentificat pentru ca sunt redirectionat automat catre pagina de login.

4. N-ar strica sa citesti si articolul asta: PHP Sessions.

#13
Berilac

Berilac

    Junior Member

  • Grup: Members
  • Posts: 192
  • Înscris: 28.11.2006

 urban, on 27th July 2009, 17:06, said:

1. Eu nu prea inteleg cum ai scris tu "programe" in php cand nu stii chestii de baza. E ca si cum m-as apuca eu sa spun ca sunt poet dar sunt paralel cu structurile literare din limba si literatura romana. De gramatica nu mai vorbesc. Daca pentru tine a downloada scripturi si a edita config.php inseamna ca ai facut programe atunci afla ca esti la fel de mecanic auto cum este baiatul de la peco care spala parbrizul, baga benzina si verifica presiunea la roti in timp ce clientii platesc.

2. De ce te complici cu ip-ul cand logica prezentata in scripturile mele este foarte simpla. Se vede treaba ca tot nu ai ascultat sfatul lui ciuly si habar n-ai ce este o sesiune si la ce foloseste ea. Altfel nu ati intreba tot felul de prostii pe aici. Spre luminarea ta .. o sesiune este unica si se refera la o conexiune temporara deschisa intre un browser si server-ul http. Odata inchis browser-ul sesiunea dispare (se distruge), orice alt browser deschis va creea o noua sesiune (cu un nou id .. desi asta nu are importanta din punctul tau de vedere). Poti chiar sa ai doua browsere (diferite) deschise de la acelasi computer conectate pe acelasi site si ambele vor avea sesiuni diferite. In cazul dat adresa de IP nu are nici o relevanta pentru ca insasi natura sesiunii face inutila utilizarea adresei de IP pentru controlul ei. Eu cam stiu la ce te referi tu dar confuzi anumite lucruri din cauza ca nu ai citit chestii de baza.

3. Daca nu pui tot codul de unde te astepti sa ghicim noi ce ai gresit tu acolo? Ca sa inteleg eu din "Adica o data ma vede logat, de doua ori nu." Cum testezi tu ca esti logat? Exista vreun script prin care resetezi sesiunea sau datele din sesiune? Stiai de exemplu ca inchiderea browserului sau resetarea serverului de http iti reseteaza si sesiunea? Eu spre exemplu as fi folosit al doilea script putin modificat:

if (!$_SESSION["isAuthenticated"]) {
  // redirect catre pagina de login
  header("Location: /login/");
}

// codul pentru utilizatorul autentificat

Si astfel imi dau seama ca nu sunt autentificat pentru ca sunt redirectionat automat catre pagina de login.

4. N-ar strica sa citesti si articolul asta: PHP Sessions.
1. Aici iarasi faci afirmatii gratuite. Nu folosesc, in general, scripturi open-source. In 70 % din cazuri imi creez site-urile de la zero si nu folosesc nimic din ce este deja facut.
Referitor la programele mele in PHP iti spun unul dintre ele K-Map Minimizer.

2. OK, am inteles. Si, da, nu am citit mare lucru despre sesiuni pentru ca, sincer, pana acum nu am avut prea multa nevoie de asa ceva.

3. Asta este codul:

----------------------------------------
left.php
----------------------------------------
session_start();
header ("Content-control: private");

include_once("functions.php");
// ...
if (check_login())
{
db_connect();

$user = $_SESSION['user'];
// interoghez baza de date cu privire la informatiile acestui user si eventual le prelucrez

}
else
{
// afisez formular care trimite datele la login.php

// daca am ceva in $_SESSION['message'] afisez si golesc variabila (vezi mai jos)
}
// ...
----------------------------------------


----------------------------------------
functions.php
----------------------------------------
// ...
function check_login()
{
if($_SESSION['logat']!=TRUE) return FALSE;
return TRUE;
}
// ...
----------------------------------------

----------------------------------------
login.php
----------------------------------------
session_start();
header ("Content-control: private");

include_once ("functions.php");

if(isset($_POST['submit']))
{
db_connect();
$user = $_POST['user'];
$pass = $_POST['parola'];

// interoghez baza de date cu aceste date

// daca am intrare in baza de date
$_SESSION['user'] = $user;
$_SESSION['logat'] = TRUE;

// daca nu
// pastrez un mesaj de eroare in $_SESSION['message']

// redirect la index.php
}
----------------------------------------

OK. Deci asta este codul. In .htaccess am rescriere din index.php in home. Daca intru pe index.php sunt logat. Daca intru pe home nu. De asemenea,
nici daca intru direct pe / nu sunt logat...

4. OK. O sa-l citesc. Multumesc.

#14
B3aT

B3aT

    Member

  • Grup: Members
  • Posts: 749
  • Înscris: 02.03.2005
Nu am citit tot ce ai scris, dar cred ca ai ratat ceva de baza.
Pe scurt, in TOATE paginile tale (cu include, sau manual in fiecare fisier) trebuie sa verifici daca e logat :

- session_start() - inceputul sesiuni
- if (!isset($_SESSION['logat']) OR empty($_SESSION['logat'])) NU e logat
daca nu exista sau e false, inseamna ca nu e logat


Doar pe pagina de logare :
- daca a introdus corect date, setezi variabila in sesiune $_SESSION['logat'] = true; else $_SESSION['logat'] = false

Nu are nici o treaba cu rewrite-ul, paginile, denumirile fisierelor, etc. Daca nu iti merge, inseamna ca ai gresit ceva, iti recomand sa folosesti print_r($_SESSION) pe toate paginile sa vezi cand si de ce pierzi logarea.

Nu vad de ce sa interoghezi baza de date, sa verifica daca $_SESSION['user']  exista ? Pai sesiunea este tinuta pe server, nu poate fi modificata de user, inteleg sa tii minte sesiunile in baza de date (cu ip-ul, browserul, data logarii) pentru o securitate sporita, dar nu sa verifici daca exista userul, este inutil.
Am vazut acum

Quote

$user = $_SESSION['user'];
// interoghez baza de date cu privire la informatiile acestui user si eventual le prelucrez
.

Sfat : NU tine parola userului nicaieri, nici in sesiion nici in cookie, si absolut nicaieri in plain text.

Edited by B3aT, 28 July 2009 - 15:58.


#15
urban

urban

    Active Member

  • Grup: Members
  • Posts: 1,622
  • Înscris: 25.07.2002
@Berilac
Ce ai postat tu nu este cod este pseudocod amestecat cu cod. Care fie vorba intre noi nu prea are nici o noima. Daca nu postezi tot codul care tie nu iti functioneaza cum te astepti sa ghicim noi de ce nu iti functioneaza. Ce ti-a zis B3at este exact ce ti-am exemplificat si eu cu cele doua scripturi in primul post al meu .. ceea ce ma face sa realizez ca problema nu este la indicatiile pe care ti le dam.

Din punct de vedere functional trebuie sa ai un login.php care citeste username/pass, face verificarea in baza de date si seteaza in sesiune o valoare. De preferat ca acea valoare (sau valori) sa fie id-ul utilizatorului sau o structura (obiect!?) care sa contina toate datele utilizatorului din DB ca sa nu fi nevoit sa le citesti de fiecare data cand ai nevoie de ele. Daca tii mortis poti ca in login.php sa citesti si o variabila url care va fi initializata cu HTTP referer ($_SERVER["request_uri"]) pentru a putea redirecta utilizatorul dupa autentificare la pagina securizata de unde s-a generat initial redirectul.

In toate celelalte pagini vei adauga la inceput o functie care verifica daca variabila de sesiune este initializata (in cazul de mai sus userId din sesiune > 0) iar in caz contrar faci redirect catre login.php.

Asta e tot mecanismul iar scheletul functiilor le ai din primul meu post. Restul e literatura iar noi suntem pe aria de programare ...

#16
Berilac

Berilac

    Junior Member

  • Grup: Members
  • Posts: 192
  • Înscris: 28.11.2006
OK, multumesc. Am facut si chestia cu redirectarea la pagina de provenienta. Voi modifica si logarea sa verifice dupa ID, cum ai spus tu.

Acum unde este problema: eu trebuie sa modific foarte des datele utilizatorului in baza de date. De exemplu numarul de puncte.
Daca il pastrez in $_SESSION['puncte'] banuiesc ca e OK sa il afisez aici, iar cand vreau sa il actualizez sa cresc $_SESSION['puncte'] si introduc aceasta noua valoare in baza de date.

Si inca ceva: nu este niciun pericol utilizatorul sa poata modifica valorile din aceste sesiuni, intrucat ele sunt salvate pe server, nu ?

Multumesc anticipat!

#17
urban

urban

    Active Member

  • Grup: Members
  • Posts: 1,622
  • Înscris: 25.07.2002
Eu nu recomand salvarea punctelor in sesiune in cazul tau. Daca eu deschid doua browsere si primesc puncte in ambele sesiuni o sa te trezesti ca numarul de puncte din fiecare sesiune nu corespunde cu numarul de puncte din db.

Utilizatorul nu poate modifica datele dintr-o sesiune decat daca ii pui tu la dispozitie o metoda prin care sa o faca gen:

$_SESSION["variabila"] = $_GET["value"]

#18
Berilac

Berilac

    Junior Member

  • Grup: Members
  • Posts: 192
  • Înscris: 28.11.2006
OK, am inteles.
Deci tot la "cere datele userului la fiecare refresh" raman.

Un calcul de-al meu arata ca un utilizator obisnuit, dupa ce se logheaza si face ceea ce poate la mine pe site executa, in medie, cam 100 de interogari. Eu am limita la hosting de 75,000 de interogari pe ora. Deci as avea o limita cam de 750 de useri pe ora sa se logheze. Deocamdata sunt departe de cifra asta, insa ma gandesc pe viitor ce e de facut (optimizare interogari nu e cazul - totul e facut cat mai "pe scurt").
Site-ul este un site de joculete. Intra omul, se joaca niste joculete, strange puncte, isi alege cadouri.

Anunturi

Chirurgia spinală minim invazivă Chirurgia spinală minim invazivă

Chirurgia spinală minim invazivă oferă pacienților oportunitatea unui tratament eficient, permițându-le o recuperare ultra rapidă și nu în ultimul rând minimizând leziunile induse chirurgical.

Echipa noastră utilizează un spectru larg de tehnici minim invazive, din care enumerăm câteva: endoscopia cu variantele ei (transnazală, transtoracică, transmusculară, etc), microscopul operator, abordurile trans tubulare și nu în ultimul rând infiltrațiile la toate nivelurile coloanei vertebrale.

www.neurohope.ro

0 user(s) are reading this topic

0 members, 0 guests, 0 anonymous users

Forumul Softpedia foloseste "cookies" pentru a imbunatati experienta utilizatorilor Accept
Pentru detalii si optiuni legate de cookies si datele personale, consultati Politica de utilizare cookies si Politica de confidentialitate