Frage zu den Sessions

Übersicht BlitzBasic Allgemein

Neue Antwort erstellen

 

tmode00

Betreff: Frage zu den Sessions

BeitragMo, Jan 19, 2009 12:14
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallo,

Wenn man sich auf einer Seite einloggt, dann wird ja bekanntlich eine Session erstellt. Über diese Session kann dann nach Aufruf der start_session() Funktion von PHP auf das $_SESSION - Array zugegriffen werden. So kann man ja bequem auf der Seite surfen ohne jedesmal Logindaten eingeben zu müssen.

Wenn ich nun ein Spiel habe was einen tcp Server in Blitzbasic erstellt, dann auch eine POST Login Anfrage an eine Login.php sendet und diese dann das OK bzw. die persönlichen Daten des Users zurückgibt wird ja ebenso am Server eine Session gestartet und im Header der Http-Rückgabe steht diese ja auch.

Meine Frage (die ich trotz intensiever Google Suche nicht lösen konnte) ist nun:

Wie kann ich die Session in einen neuem tcpstream nutzen nach dem Prinzip

function Login()
tcp=createtcpserver("seite.de",80)

POST /index.php http 1.1
HOST: seite.de
chr(13)
daten senden (username=a&passwort=b)
chr(13)
end function

function start_game
... in der funktion nun die Session verwenden, also index.php aufrufen und irgendwie sessionid übertragen so das php weis, aha session id ok, userdaten zurückgeben
end function

im php wird dann entweder ein $_POST[user] etc. empfangen und erstmals in die $_SESSION geschrieben oder aus der $_SESSION die Logindaten gelesen, wie normal auch.

Kurz: wie kann ich eine Session ansteuern mit Blitzbasic tcp verbindung. Ich will halt nicht immerwieder die logindaten senden sondern nur die für die spielrunde benötigten daten, wie man es auch in einem Browsergame machen würde

Vielleicht ein bisschen umständlich formuliert, darin bin ich gut!

Ich hoffe mir kann jeamd helfen

Danke schonmal im Voraus.
While (1) : Wend

D2006

Administrator

BeitragMo, Jan 19, 2009 12:23
Antworten mit Zitat
Benutzer-Profile anzeigen
Sessions werden glaub ich über Cookies geregelt. Wenn PHP eine Session für dich anlegt, gibt die Seite auch eine Anweisung für ein Cookie zurück. Dieses Cookie muss dein Programm quasi selbst anlegen und bei jedem Aufruf einer Seite wieder mitsenden.

Wie genau das funktioniert, musst du nachlesen.
Intel Core i5 2500 | 16 GB DDR3 RAM dualchannel | ATI Radeon HD6870 (1024 MB RAM) | Windows 7 Home Premium
Intel Core 2 Duo 2.4 GHz | 2 GB DDR3 RAM dualchannel | Nvidia GeForce 9400M (256 MB shared RAM) | Mac OS X Snow Leopard
Intel Pentium Dual-Core 2.4 GHz | 3 GB DDR2 RAM dualchannel | ATI Radeon HD3850 (1024 MB RAM) | Windows 7 Home Premium
Chaos Interactive :: GoBang :: BB-Poker :: ChaosBreaker :: Hexagon :: ChaosRacer 2
 

tmode00

Betreff: hmmm

BeitragMo, Jan 19, 2009 15:20
Antworten mit Zitat
Benutzer-Profile anzeigen
a, genau sowas dachte ich mir schon. Das was bei jedem Browser quasi einfach funktioniert muss ich irgendwie selber basteln und mit übergeben...

Sowas kommt vom Server zurück, nach dem login:
HTTP/1.1 200 OK Date: Mon, 19 Jan 2009 13:21:53 GMT Server: Apache/2.2.3 (Linux/SUSE) X-Powered-By: PHP/5.2.0 Expires: Thu, 19 Nov 1981 08:52:00 GMT Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0 Pragma: no-cache Set-Cookie: sid=ymcbRmwj4LPbvi3KvGVV4gD5h7_uOElTmo7_rDLMUeMzzmUhnwpYLshPg23yeMC4; path=/; HttpOnly Set-Cookie: f0dd93b21eea5360bdc37b5cacfd8f79=lSACIc4kvyEpw9xWhPS2KfPhHJim_LwC_WJrPMDv88iVk-TiWnAhzrBBqKaNxU3szKyER7RvmS0SP3eObDI_8g..; expires=Thu, 14-Jan-2010 13:21:53 GMT; path=/ Connection: close Content-Type: text/html


Daraus also ein kecks basteln und dieses wieder übersenden. Das ist wichtig weil ich Dateien auf dem Server hab die keine Logindaten erwarten sondern eine Session, nur die Login.php erwartet logindaten, alle anderen loggen sich über session ein..

hat jemand eine idee wie sowas geht?
While (1) : Wend
  • Zuletzt bearbeitet von tmode00 am Mo, Jan 19, 2009 15:25, insgesamt einmal bearbeitet

D2006

Administrator

BeitragMo, Jan 19, 2009 15:23
Antworten mit Zitat
Benutzer-Profile anzeigen
An dieser Stelle wäre es absolut angebracht, mal ein wenig Eigeninitiative zu zeigen und eine Suchmaschine zu bemühen. Wie dem auch sei, der Wiki-Artikel ist ein guter Startpunkt: http://de.wikipedia.org/wiki/HTTP-Cookie
Intel Core i5 2500 | 16 GB DDR3 RAM dualchannel | ATI Radeon HD6870 (1024 MB RAM) | Windows 7 Home Premium
Intel Core 2 Duo 2.4 GHz | 2 GB DDR3 RAM dualchannel | Nvidia GeForce 9400M (256 MB shared RAM) | Mac OS X Snow Leopard
Intel Pentium Dual-Core 2.4 GHz | 3 GB DDR2 RAM dualchannel | ATI Radeon HD3850 (1024 MB RAM) | Windows 7 Home Premium
Chaos Interactive :: GoBang :: BB-Poker :: ChaosBreaker :: Hexagon :: ChaosRacer 2

Smily

BeitragMo, Jan 19, 2009 15:25
Antworten mit Zitat
Benutzer-Profile anzeigen
HTTP lässt sich eigentlich wunderbar selbstständig lernen. Dazu muss man nichtmal irgendwelchen dicken bücher/dokumente wälzen Wink


schau dir mal das Addon "Live HTTP Headers" für firefox und die software "Wireshark" an. Wie das alles funktioniert lernt man dann mit der zeit von selbst Wink
Lesestoff:
gegen Softwarepatente | Netzzensur | brain.exe | Unabhängigkeitserklärung des Internets

"Wir müssen die Rechte der Andersdenkenden selbst dann beachten, wenn sie Idioten oder schädlich sind. Wir müssen aufpassen. Wachsamkeit ist der Preis der Freiheit --- Keine Zensur!"
stummi.org
 

tmode00

Betreff: naja

BeitragMo, Jan 19, 2009 15:27
Antworten mit Zitat
Benutzer-Profile anzeigen
naja Eigeninitiative ist gut, hab mir die wikiseite schon vorher angeschaut, aber desshalb weis ich noch lange nicht wie ich das script basteln soll.Vielleicht hat ja jemand schonmal mit sessions von bb aus gearbeitet und hat ein bespiel, da ja keine offiziellen Beispiele für ähnliches existieren. Ich will ja nicht gleich das ganze http-protocol verstehen. Ich ahbe schon eine wunderbare funktion zum senden von post requests geschrieben,

Code: [AUSKLAPPEN]

Type TServerreturn
   Field lineid;Zeilennummer
   Field content$;Der eigentliche Inhalt der Zeile
End Type
Global serverreturn.TServerreturn

Function http_request(protocol$="http://",server$="testsite.de",method$="POST",phpfile$="/index.php",content$="user=a&pass=b")
   ;alte serverreturns löschen
   For serverreturn.TServerreturn = Each TServerreturn
      Delete serverreturn
   Next
   
   ;Stream öffnen
   Local tcp=OpenTCPStream(server$,80)
   If Not tcp Then
      Return 1;Error 1, keine Verbindung
   EndIf
   
   ;method immer großbuchstaben, wegen der If erkennung
   method$ = Upper(method$)
   
   ;Http-request senden (POST || GET)
   Local sendstring$
   If (method$="POST") Then
      sendstring$ = phpfile$
      WriteLine tcp, method$ + " " + sendstring$ + " HTTP 1.1"
      WriteLine tcp,"Host: " + server$
      WriteLine tcp,"User-Agent: Blitzbasic"
      WriteLine tcp,"Content-Type: application/x-www-form-urlencoded"
      WriteLine tcp,"Content-Length: "+ Len(content$)
      WriteLine tcp,""
      WriteLine tcp,content$
      WriteLine tcp,""
   ElseIf (method$="GET") Then
      sendstring$ = protocol$ + server$ + phpfile$ + "?" + content$
      WriteLine tcp, method$ + " " + sendstring$ + " HTTP 1.1"
      WriteLine tcp,Chr$(10)
   EndIf
   
   ;Rückgabe zur weiterverarbeitung speichern
   Local lineid
   While Not Eof(tcp)
      lineid = lineid + 1;beginne mit Zeile 1
      serverreturn.TServerreturn = New TServerreturn
      serverreturn\lineid = lineid
      serverreturn\content$ = ReadLine(tcp)
   Wend
   CloseTCPStream tcp   
End Function

Function print_serverreturn()
   For serverreturn.TServerreturn = Each TServerreturn
      ;folgendes ist nur zur seitentrennung:
      break = serverreturn\lineid Mod 50
      If (break=0) Then
         WaitKey
         Cls
         Locate 0,0
      EndIf
      
      Print "00" + serverreturn\lineid + ": " + serverreturn\content$
      Delete serverreturn
   Next
End Function

Function make_bowser_file()
   Local outfile = WriteFile("out.html")
   For serverreturn.TServerreturn = Each TServerreturn
      WriteLine(outfile,serverreturn\content$)
      Delete serverreturn
   Next
End Function




....fehlt nur noch die session funktionalität! naja also sollte jemand ein Beispiel haben, wäre das hier Postbar, sonst muss ich mir das http-protocol wohl noch genauer anschauen. Und vorallem den bereich der kekse
While (1) : Wend

Smily

BeitragMo, Jan 19, 2009 15:32
Antworten mit Zitat
Benutzer-Profile anzeigen
Hier siehst du einen mittschnitt einer kommunikation aus dem live-http-headers. Daraus sollte man eigentlich erkennen, wie das ganze funktioniert

Code: [AUSKLAPPEN]
http://phpprogger.ph.funpic.de/test/set.php

GET /test/set.php HTTP/1.1
Host: phpprogger.ph.funpic.de
User-Agent: Mozilla/5.0 (X11; U; Linux i686; de; rv:1.9.0.5) Gecko/2008122011 Iceweasel/3.0.5 (Debian-3.0.5-1)
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: de-de,de;q=0.8,en-us;q=0.5,en;q=0.3
Accept-Encoding: gzip,deflate
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
Keep-Alive: 300
Connection: keep-alive

HTTP/1.x 200 OK
Date: Mon, 19 Jan 2009 13:28:24 GMT
Server: Apache/2.2.11 (Unix) mod_perl/2.0.4 Perl/v5.10.0
Set-Cookie: cken=1232371704; path=/; domain=.funpic.de
Set-Cookie: PHPSESSID=4561b4926374c6f1d8bb175b243f1094; expires=Mon, 19 Jan 2009 14:28:24 GMT; path=/
Expires: Thu, 19 Nov 1981 08:52:00 GMT
Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0
Pragma: no-cache
Keep-Alive: timeout=10, max=992
Connection: Keep-Alive
Transfer-Encoding: chunked
Content-Type: text/html; charset=ISO-8859-1
----------------------------------------------------------

http://phpprogger.ph.funpic.de/test/set.php

GET /test/set.php HTTP/1.1
Host: phpprogger.ph.funpic.de
User-Agent: Mozilla/5.0 (X11; U; Linux i686; de; rv:1.9.0.5) Gecko/2008122011 Iceweasel/3.0.5 (Debian-3.0.5-1)
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: de-de,de;q=0.8,en-us;q=0.5,en;q=0.3
Accept-Encoding: gzip,deflate
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
Keep-Alive: 300
Connection: keep-alive
Cookie: cken=1232371704; PHPSESSID=4561b4926374c6f1d8bb175b243f1094


HTTP/1.x 200 OK
Date: Mon, 19 Jan 2009 13:28:26 GMT
Server: Apache/2.2.11 (Unix) mod_perl/2.0.4 Perl/v5.10.0
Set-Cookie: cken=1232371706; path=/; domain=.funpic.de
Expires: Thu, 19 Nov 1981 08:52:00 GMT
Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0
Pragma: no-cache
Keep-Alive: timeout=10, max=984
Connection: Keep-Alive
Transfer-Encoding: chunked
Content-Type: text/html; charset=ISO-8859-1
----------------------------------------------------------

Lesestoff:
gegen Softwarepatente | Netzzensur | brain.exe | Unabhängigkeitserklärung des Internets

"Wir müssen die Rechte der Andersdenkenden selbst dann beachten, wenn sie Idioten oder schädlich sind. Wir müssen aufpassen. Wachsamkeit ist der Preis der Freiheit --- Keine Zensur!"
stummi.org
  • Zuletzt bearbeitet von Smily am Mo, Jan 19, 2009 15:34, insgesamt einmal bearbeitet

D2006

Administrator

BeitragMo, Jan 19, 2009 15:33
Antworten mit Zitat
Benutzer-Profile anzeigen
Dann streng doch mal dein Köpfchen an. In der Antwort, die dir der Server schickt sehe ich auf den ersten Blick ein Cookie mit einer wirren Variable (Session-ID), welche der Server beim nächsten Aufruf gern zurück hätte. Und wie das dann aussehen muss, steht wunderbar in dem Wiki-Artikel.
Intel Core i5 2500 | 16 GB DDR3 RAM dualchannel | ATI Radeon HD6870 (1024 MB RAM) | Windows 7 Home Premium
Intel Core 2 Duo 2.4 GHz | 2 GB DDR3 RAM dualchannel | Nvidia GeForce 9400M (256 MB shared RAM) | Mac OS X Snow Leopard
Intel Pentium Dual-Core 2.4 GHz | 3 GB DDR2 RAM dualchannel | ATI Radeon HD3850 (1024 MB RAM) | Windows 7 Home Premium
Chaos Interactive :: GoBang :: BB-Poker :: ChaosBreaker :: Hexagon :: ChaosRacer 2
 

tmode00

BeitragMo, Jan 19, 2009 15:34
Antworten mit Zitat
Benutzer-Profile anzeigen
Zitat:
Hier siehst du einen mittschnitt einer kommunikation aus dem live-http-headers.


Aha...

ok ich versuchs allein.

Danke trotzdem
While (1) : Wend
 

tmode00

Betreff: so...

BeitragDi, Jan 20, 2009 10:13
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich habe es jetzt einigermaßen erstanden, irgendwie bildet der Server aber 2 Cookies und aktzeptiert den gesendeten nicht so recht. Ich habe mal versucht mit Wireshark sniffer eine Opera-anfrage an meinen Server (mit cookie-login) abzufangen und das dann genauso zu senden. Die abgefangene Abfrage:

Code: [AUSKLAPPEN]
GET /index.php?news HTTP/1.1\r\n
Request Method: GET
Request URI: /index.php?news
Request Version: HTTP/1.1
User-Agent: Opera/9.62 (Windows NT 5.1; U; de) Presto/2.1.1\r\n
Host: ttlabs.de\r\n
Accept: text/html, application/xml;q=0.9, application/xhtml+xml, image/png, image/jpeg, image/gif, image/x-xbitmap, */*;q=0.1\r\n
Accept-Language: de-DE,de;q=0.9,en;q=0.8\r\n
Accept-Charset: iso-8859-1, utf-8, utf-16, *;q=0.1\r\n
Accept-Encoding: deflate, gzip, x-gzip, identity, *;q=0\r\n
Cookie: sid=mBagTPI7BTgZdF016Av76CWXZS6709dpQEFq2EeMcw4I8O4VgzWAmsYwYlCO6ul0; f0dd93b21eea5360bdc37b5cacfd8f79=_Tz2D7GWVoQrYg6e-nv1MCL9uOYU4KCB6v0UHYr_TabvQmf76w1qOG3PBU50q64JHw3IwQJBu9EQ2agEkEC7pg..\r\n
Cookie2: $Version=1\r\n
Connection: Keep-Alive, TE\r\n
TE: deflate, gzip, chunked, identity, trailers\r\n
\r\n


Nun gab es ein paar bad requests etc.. bis ichs letztendlich zumindest geschafft habe das der Cookie irgendwie übertragen wird aber jetzt werden 2 Cookies zurückgegeben und der Übertragene wird nicht aktzeptiert (es setzt die session mit angegebener sid nicht fort)

Das bekomme ich in Blitzbasic zurück:
Code: [AUSKLAPPEN]

001: HTTP/1.1 200 OK
002: Date: Tue, 20 Jan 2009 08:18:22 GMT
003: Server: Apache/2.2.3 (Linux/SUSE)
004: X-Powered-By: PHP/5.2.0
005: Expires: Thu, 19 Nov 1981 08:52:00 GMT
006: Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0
007: Pragma: no-cache
008: Set-Cookie: sid=X9UWTnUglWHB8K-JDOJWkJU0NEFvkUWazVv4zcnEeEj63hbUv1evaca_taLuMuAM; path=/; HttpOnly
009: Set-Cookie: f0dd93b21eea5360bdc37b5cacfd8f79=4WaEwPJBQXQypYNBiaVXsXiii8gru-N_XySGdcAO9qk.; expires=Mon, 21-Jan-2008 08:18:21 GMT; path=/
0010: Connection: close
0011: Content-Type: text/html


und das hier habe ich gesendet:
Code: [AUSKLAPPEN]
      sendstring$ = phpfile$
      WriteLine tcp, "GET" + " " + sendstring$ + " HTTP 1.1"
      WriteLine tcp,"Host: " + server$
      WriteLine tcp,"Cookie: sid=mBagTPI7BTgZdF016Av76CWXZS6709dpQEFq2EeMcw4I8O4VgzWAmsYwYlCO6ul0; f0dd93b21eea5360bdc37b5cacfd8f79=_Tz2D7GWVoQrYg6e-nv1MCL9uOYU4KCB6v0UHYr_TabvQmf76w1qOG3PBU50q64JHw3IwQJBu9EQ2agEkEC7pg..\r\n"
      WriteLine tcp,"User-Agent: Blitzbasic"
      WriteLine tcp,"Content-Type: application/x-www-form-urlencoded"
      WriteLine tcp,"Content-Length: "+ Len(content$)
      WriteLine tcp,""
      WriteLine tcp,content$
      WriteLine tcp,""


Ich hab schon ewig probiert aber irgendwie bekomme ich die exakte syntax nicht richtig hin.

Neue Antwort erstellen


Übersicht BlitzBasic Allgemein

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group