[php] sessie van gebruiker hergebruiken in socket-verbinding

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • Johnny
  • Registratie: December 2001
  • Laatst online: 14:39

Johnny

ondergewaardeerde internetguru

Topicstarter
Op een website kunnen gebruikers inloggen waarna ze allerlei formulieren kunnen invullen die naar de server verstuurd worden.

De website gebruikt PHP en de inloginformatie wordt bewaard in sessies.

Soms doen gebruikers er echter zo lang over om een formulier in te vullen dat de sessie is verlopen en bij het versturen alle ingevulde gegevens kwijt zijn omndat men weer terecht komt op de inlogpagina.

Nu had ik het idee om de informatie uit de $_POST array even tijdelijk in de nieuwe sessie te zetten en dan na het opnieuw inloggen door een socket te openen in PHP de data te versturen naar het juiste script zodat het alsnog wordt opgeslagen.

Dat werkt allemaal uitstekend, maar met het request naar het socket moet ik ook de sessie meesturen, dat kan via GET, POST of een cookie.

Het probleem is, zodra ik de sessie van de gebruiker meestuur dan werkt de socket-verbinding niet meer, er gebeurt helemaal niets, het request wordt verzonden en daarna is het script klaar, er komt niets terug, geen foutmeldingen, of time-out.

Dit zou niet zo gek zijn als sessies zouden zijn gekoppeld aan een IP-adres, of user-agent, maar volgens de manual is dat niet het geval:
There are several ways to leak an existing session id to third parties. A leaked session id enables the third party to access all resources which are associated with a specific id. First, URLs carrying session ids. If you link to an external site, the URL including the session id might be stored in the external site's referrer logs. Second, a more active attacker might listen to your network traffic. If it is not encrypted, session ids will flow in plain text over the network. The solution here is to implement SSL on your server and make it mandatory for users.
Zodra ik de sessie-ID een beetje verander, door er bijvoorbeeld een extra letter achter te zetten, dan werkt alles weer perfect, maar dan heb ik niet dezelfde sessie als de gebruiker.

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
<?php

session_start();

$host = 'mijnwebsite.nl';
$uri = '/';
$sid = session_name().'='.session_id();
$uri .= '?'.$sid; //zet de session-ID achter het pad, werkt niet!

$reqheader = "GET ".$uri." HTTP/1.1\r\n".
"Host: ".$host."\r\n".
"User-Agent: ".$_SERVER['HTTP_USER_AGENT']."\r\n".
//"Cookie: ".session_name()."=".session_id()."\r\n". //via een cookie werkt ook niet!
"Connection: close\r\n";

$socket = fsockopen($host, 80, $errno, $errstr);

if(!$socket) {

    return 'Fout:'.$errno.$errstr;
}

fputs($socket, $reqheader);

while (!feof($socket)) {
   $result[] = fgets($socket, 4096);
}

fclose($socket);

//laat response op scherm zien

$result = implode('', $result);
$result = htmlspecialchars($result);

echo(nl2br($reqheader));
echo(nl2br($result));
echo($errorno.' '.$errstr);

?>


Weet iemand hoe ik dit kan laten werken?

Aan de inhoud van de bovenstaande tekst kunnen geen rechten worden ontleend, tenzij dit expliciet in dit bericht is verwoord.


Acties:
  • 0 Henk 'm!

  • Erkens
  • Registratie: December 2001
  • Niet online

Erkens

Fotograaf

Johnny schreef op maandag 06 maart 2006 @ 13:26:
Soms doen gebruikers er echter zo lang over om een formulier in te vullen dat de sessie is verlopen en bij het versturen alle ingevulde gegevens kwijt zijn omndat men weer terecht komt op de inlogpagina.
kan je niet gewoon de sessie laten verlopen zodra de browser wordt afgesloten, lijkt met toch wel de eenvoudigste oplossing ;)