How is this done since there is no way to pass information taken from the request body in HandleURL to the session?
The only way I can see though this is for the API to require a token as a parameter which is used as a reference in an app-wide dictionary. While this is possible, it means we incur the overhead of issuing and managing unique tokens on a per-session basis. There are many sites which don’t support this means of integration.
The unique ID could also be in a request header.
As pointed out by Greg previously, if the client is a Web browser a cookie could be set and the browser asked to call back. However if the caller is another a web service setting a cookie probably won’t be allowed.
No, client-side cookies set by a server are not as easy as it seems because there could be multiple instances of an app in a browser, and there’s no way of knowing in HandleURL if the browser will allow cookies in the first place.
Something like this seems to work with my browser:
In the App Object:
Public Property UrlData as Dictionary Sub Opening UrlData = New Dictionary End Sub Funtction HandleURL Dim strURLSessionID as String = EncodeHex(Xojo.Core.Date.SecondsFrom1970.ToString) App.URLData.Value(URLSessionID) = Request.Body Response.Header("LOCATION") = "/?"+"URLSessionID="+strURLSessionID Response.Status = 302 Return True End Function
In the Session object:
Sub Opening dim strURLSessionID as string = URLParameter("URLSessionID") dim strRequestBody as string = app.URLData.Value(strURLSessionID) End Sub
It assumes a single Xojo Web instance for shared storage. Files or database storage would be needed over multiple cores.
That also assumes that you only get one connection per second. If you need more, you might try Microseconds or Ticks instead of Xojo.Core.Date.SecondsFrom1970.
Seconds from 1970 returns a decimal with 3 places on Linux so it’s milliseconds I think.