Hey Ted, thanks for the reply,

In respect of web application architecture, I'm fully aware of session
persistence mechanisms (I work as a developer of web apps after all).

What I really would like to know is the inner-workings of the set_session_id
and current_session_id as well as reset_session_id C functions.

Our company uses a generator called GeneXus which is high level modeling
enviroment that deployes to a variety of languages Java being one of them.
Being a generator, we don't have much information about the way it generates
the code becouse 1) it is a proprietary generator, 2) the code generated is
propositally cryptic (don't make any sense at all, with weird var and method
names and so on).

However, I was given the mission to implement an audit-trail engine to this
application. The discussion I sent in the first message of this thread was
really helpful, the C functions sent by Manual were crucial. They work fine,
**but** I don't have much knowledge in C nor PostgreSQL internal
architecture **and** we need to know certain inner details on how this
mechanism works in order to take some important decisions.

I know that this PostgreSQL C module has a static var that in turn keeps the
integer set by the function "set_session_id" - but is this var global to the
server's service ? Does PostgreSQL mantain one "instance" of this var per
requested connection ? I would like to know how this works.

Take the following scenario:
 - user enters the web app;
 - web app takes a reference to a connection from the db connection pool;
 - web app does some db operation

When the app takes a reference to a connection and does the operation, just
after that, in the application, I set the session id. Then the db operation
is performed and the audit stored procedure is ran. The audit-trail engine
performs its work and logs the operation and modifications the user did as
well as **which application user did it** (which is the purpose of the
set_session_id technique - being able to pass the application user who did
the operation to the server so that that the audit-trail can log it
altogether).

Once the operation is done and the connection is back to the pool, does
PostgreSQL discart the associated var ? Does it mantain one "instance" per
request made ? That's what I would like to know.

Thanks,

On 8/21/07, Ted Byers <[EMAIL PROTECTED]> wrote:
>
>
> --- Marcelo de Moraes Serpa <[EMAIL PROTECTED]>
> wrote:
>
> > Hello list,
> > [snip]
> >
> > * Each http request gets an instance of a session_id
> > ? Or is it
> > per-connection ?
>
> It depends.  There is no necessary correlation between
> a session as defined within a web application and a
> session as defined in the RDBMS.  I routinely set up
> web applications that may have multiple "sessions" as
> seen by the RDBMS.  Consider the idiom of doing
> operations with the least priviledge required to get
> the job done.  The application might log into the
> database as one databse user with very limited rights,
> to authenticate the user and pass data to the web
> application regarding what the user is permitted to do
> (all server side, on the application server).  Then,
> the application may log in as a very different user
> with limited rights to perform some operation the user
> has initiated.  So far, we have two sessions as far as
> the database is concerned and only one as far as the
> web application is concerned.
>
> If you're working with web applications, you must know
> that multiple http requests can share a web
> application session, as can multiple web applications
> (if written to do so using the single sign-on idiom),
> assuming you use technologies such as cookies or URL
> rewriting or hidden form fields, or the magic of
> ASP.NET, to set up and maintain sessions, and that the
> session is restricted to a single http request if you
> don't (plain old http/html is stateless, so there is
> no useful concept of session without help from other
> technologies).
>
> HTH
>
> Ted
>
>

Reply via email to