Probleme SOAP

PEAR, Smarty, ADOdb, OOP, PHP 5, XML, UML, Şabloane de proiectare, PHP-GTK.

Moderatori: coditza, Emil, Moderatori

Avatar utilizator
stealth
Senior Member
Mesaje: 308
Membru din: Lun Iun 21, 2004 9:36 am
Localitate: Timisoara
Contact:

Probleme SOAP

Mesajde stealth » Vin Sep 11, 2009 10:44 am

Am intalinit de curand o problema cautand sa implementez un client-server prin SOAP.
La server intotdeauna se pierde seseiunea creeata la client; practic este generata o alta sesiune.

Am 2 fisiere:

Clientul: test_service_client.php
---------------------------------------------------------------------

Cod: Selectaţi tot

session_name('site');
session_start();

$_SESSION['user_id'] = 1;
$_SESSION['username'] = 'gimi';

print_r(session_id());
print_r($_SESSION);

$aOptions = array('location'=>'http://localhost/test_service_server.php',
              'uri'=>'http://localhost');
$oClient = new SoapClient(null, $aOptions);
$mRes = $oClient->getValues('Gimi', 'Today');

print_r($mRes);

---------------------------------------------------------------------

Serverul: test_service_server.php
---------------------------------------------------------------------

Cod: Selectaţi tot

session_name('site');
session_start();

$aOptions = array('uri'=>'http://localhost');
$oServer = new SoapServer(null, $aOptions);
$oServer->setClass('MyClass');
$oServer->setPersistence(SOAP_PERSISTENCE_SESSION);
$oServer->handle();

class MyClass
{
   public function getValues($who, $when)
   {
      //return array('name'=>$who, 'time'=>$when, 'fees'=>array('1'=>'2.90', '3'=>'200'));
      return array($_SESSION, session_id());
   }
}

---------------------------------------------------------------------

Ca exemplu, ce returneaza apelarea scriptului: test_service_client.php

Cod: Selectaţi tot

SESSID = pt5vig397td2kbfe5fi2aiskb2
Array
(
    [user_id] => 1
    [username] => gimi
)
------------
si raspunsul fisierului server SOAP
Array
(
    [0] => Array
        (
            [_bogus_session_name] => stdClass Object
                (
                )

        )

    [1] => psjgt134t8oob61aik4capbsv0
)



Am nevoie sa folosesc anumite variabile din sesiune in fisierul SERVER SOAP; de exemplu ID-ul user-ului autentificat pentru extragerea din baza de date a unor informatii despre el.

Daca aveti vreo idee cum sa pastrez sesiunea si sa ma folosesc de ea si in fisierul server!
VA MULTUMESC MULT TUTUROR !



Avatar utilizator
Amenthes
Senior Member
Mesaje: 1370
Membru din: Lun Dec 12, 2005 8:00 am
Contact:

Mesajde Amenthes » Vin Sep 11, 2009 11:05 am

Adica vrei ca array-ul $_SESSION sa contina aceleasi valori si in fisierul
client si in cel server?
I'm under construction | http://igstan.ro

Avatar utilizator
stealth
Senior Member
Mesaje: 308
Membru din: Lun Iun 21, 2004 9:36 am
Localitate: Timisoara
Contact:

Mesajde stealth » Vin Sep 11, 2009 11:12 am

Amenthes scrie:Adica vrei ca array-ul $_SESSION sa contina aceleasi valori si in fisierul
client si in cel server?

Mai exact, intrebarea este daca se poate mentine aceeasi sesiune atat in server, ca si pe client.
In exemplu sesiunea din server este cu totul diferita de cea din client:
client: pt5vig397td2kbfe5fi2aiskb2
server: psjgt134t8oob61aik4capbsv0
--------------------------------------------------------------------------
Deci, cum as putea sa pastrez si pe server aceeasi sesiune ca si pe client?
Este posibil?
Daca aveti vreo solutie ...

Avatar utilizator
Amenthes
Senior Member
Mesaje: 1370
Membru din: Lun Dec 12, 2005 8:00 am
Contact:

Mesajde Amenthes » Vin Sep 11, 2009 11:24 am

Pai ce vrei tu cam contrazice notiunea de sesiune. Daca ai doi clienti la acelasi
server, toti 3 pot avea acces la aceleasi date? Daca da, asta nu mai e sesiune.
Stocheaza informatia aia undeva intr-o baza de date si gata. Nu prea inteleg
de ce ai nevoie sa ai datele astea comune, mai ales ca SOAP poate fi folosit
de pe alte calculatoare, de un program scris in alt limbaj decat PHP, etc.
I'm under construction | http://igstan.ro

Avatar utilizator
stealth
Senior Member
Mesaje: 308
Membru din: Lun Iun 21, 2004 9:36 am
Localitate: Timisoara
Contact:

Mesajde stealth » Vin Sep 11, 2009 11:35 am

Amenthes scrie:Pai ce vrei tu cam contrazice notiunea de sesiune. Daca ai doi clienti la acelasi
server, toti 3 pot avea acces la aceleasi date? Daca da, asta nu mai e sesiune.
Stocheaza informatia aia undeva intr-o baza de date si gata. Nu prea inteleg
de ce ai nevoie sa ai datele astea comune, mai ales ca SOAP poate fi folosit
de pe alte calculatoare, de un program scris in alt limbaj decat PHP, etc.

Da, ai dreptate, o sa incerc o alta abordare!
Merci mult.

Avatar utilizator
Amenthes
Senior Member
Mesaje: 1370
Membru din: Lun Dec 12, 2005 8:00 am
Contact:

Mesajde Amenthes » Vin Sep 11, 2009 11:54 am

PHP-ul implementează sesiunile folosindu-se de cookie-uri. Poți face și tu
asta în cazul tău. Cred ca asta vroiai tu de fapt. Sa stabilești o conexiune de
tip sesiune intre fiecare client si server.

Ai putea face cam asa. Primul request intre client si server ar trebui sa fie
de tip handshake, adică sa facă cunoștință. Răspunsul tău la request-ul asta
ar trebui sa includă și un indicator de sesiune. Şi aici opțiunile diferă. Poți
folosi cookie-uri sau un element/atribut înăuntrul payload-ul XML. Apoi, la
fiecare request ulterior al client-ul, verifici dacă are prezent acel indicator și
in asociez cu o anumita sesiune pe care o ai tu stocata undeva (DB probabil).
În felul asta poți face și autentificare.
I'm under construction | http://igstan.ro


Înapoi la “PHP Avansat”

Cine este conectat

Utilizatori ce ce navighează pe acest forum: Niciun utilizator înregistrat și 13 vizitatori