Sessions can be created using the SessionID option in the sa_set_http_option system procedure. The session ID can be defined by any non-null string.
Session state management is supported by URLs and cookies. HTTP sessions can be accessed using HTTP cookies, or through the URL of a GET request or from within the body of a POST (x-www-form-urlencoded) request. For example, the following URL utilizes the XYZ database connection when it executes:
http://localhost/sa_svc?SESSIONID=XYZ
The request is processed as a standard session-less request if an XYZ database connection does not exist.
The following code illustrates how to create a RAW web service that creates and deletes sessions. A connection scope variable named request_count is incremented each time an HTTP request is made while specifying a valid SessionID.
CREATE SERVICE mysession TYPE 'RAW' AUTHORIZATION OFF USER DBA AS CALL mysession_proc(); CREATE PROCEDURE mysession_proc() BEGIN DECLARE body LONG VARCHAR; DECLARE hostname LONG VARCHAR; DECLARE svcname LONG VARCHAR; DECLARE sesid LONG VARCHAR; CALL sa_set_http_header ( 'Content-Type', 'text/html' ); SELECT CONNECTION_PROPERTY('SessionID') INTO sesid; SELECT CONNECTION_PROPERTY('HttpServiceName') INTO svcname; SELECT HTTP_HEADER( 'Host' ) INTO hostname; IF HTTP_VARIABLE('delete') IS NOT NULL THEN CALL sa_set_http_option( 'SessionID', NULL ); SET body = '<html><body>Deleted ' || sesid || '</BR><a href="http://' || hostname || '/' || svcname || '">Start Again</a>'; SELECT body; END IF; IF sesid = '' THEN SET sesid = set_session_url(); CREATE VARIABLE request_count INT; SET request_count = 0; SET body = '<html><body> Created session ID ' || sesid || '</br><a href="http://' || hostname || '/' || svcname || '?SessionID=' || sesid || '"> Enter into Session</a>'; ELSE SELECT CONNECTION_PROPERTY('SessionID') INTO sesid; SET request_count = request_count +1; SET body = '<html><body>Session ' || sesid || '</br>' || 'created ' || CONNECTION_PROPERTY('SessionCreateTime') || '</br>' || 'last access ' || CONNECTION_PROPERTY('SessionLastTime') || '</br>' || 'connection ID ' || CONNECTION_PROPERTY('Number') || '</br>' || '<h3>REQUEST COUNT is '|| request_count || '</h3><hr></br>' || '<a href="http://' || hostname || '/' || svcname || '?SessionID=' || sesid || '">Enter into Session</a></br>' || '<a href="http://' || hostname || '/' || svcname || '?SessionID=' || sesid || '&delete">Delete Session</a>'; END IF; SELECT body; END;