Thread: Apache::Session in PostgreSQL

Apache::Session in PostgreSQL

From
Victor Manuel Jaquez Leal
Date:
Hi!

I want to use the Apache::Session perl module in my WebApps, but when I
try to insert the session tuple, the Postgres can't handle the string and
abort the operation.

I made a dump for the SQL instruction generated by the module, it use the
Storable module to generate a "storable" string from the variables, but
this string has '\00', '\02', '\v' chars, and I thing that they are the
chars that trigger the exception...

There are any patch for the module for this?

I really don't like MySQL, but it can handle this "storable" strings....
8-(

Thnx

Ceyusa



Re: Apache::Session in PostgreSQL

From
Herbert Liechti
Date:
Victor Manuel Jaquez Leal wrote:
>
> Hi!
>
> I want to use the Apache::Session perl module in my WebApps, but when I
> try to insert the session tuple, the Postgres can't handle the string and
> abort the operation.

I had the same problem ;-(. I found no solution for that so I went to
store the session parameters in the file system. I'm also interested
in a solution.

Below the requirements for the Apache::Session::DbI

NAME
       Apache::Session::DBI - Session persistence via DBI

SCHEMA
       To use this module, you will need these columns in a table
       called 'sessions':

        id char(16)
        length int(11)
        a_session text

       Where the a_session column needs to be able to handle
       arbitrarily long binary data.

Regards Herbie

--
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Herbert Liechti                     E-Mail: Herbert.Liechti@thinx.ch
ThinX networked business services        Stahlrain 10, CH-5200 Brugg
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

Re: Apache::Session in PostgreSQL

From
"Ross J. Reedstrom"
Date:
On Fri, Mar 31, 2000 at 08:53:28PM +0200, Herbert Liechti wrote:
> Victor Manuel Jaquez Leal wrote:
> >
> > Hi!
> >
> > I want to use the Apache::Session perl module in my WebApps, but when I
> > try to insert the session tuple, the Postgres can't handle the string and
> > abort the operation.
>
> I had the same problem ;-(. I found no solution for that so I went to
> store the session parameters in the file system. I'm also interested
> in a solution.
>
> Below the requirements for the Apache::Session::DbI
>
> NAME
>        Apache::Session::DBI - Session persistence via DBI
>
> SCHEMA
>        To use this module, you will need these columns in a table
>        called 'sessions':
>
>         id char(16)
>         length int(11)
>         a_session text
>
>        Where the a_session column needs to be able to handle
>        arbitrarily long binary data.

Hmm, you might try the bytea type:

reedstrm=> create table test2 (b bytea, t text);
CREATE
reedstrm=> \d test2
Table    = test2
+----------------------------------+----------------------------------+-------+
|              Field               |              Type                | Length|
+----------------------------------+----------------------------------+-------+
| b                                | bytea                            |   var |
| t                                | text                             |   var |
+----------------------------------+----------------------------------+-------+
reedstrm=> insert into test2 values ('abdkrxf\02\v\00fges','abdkrxf\02\v\00fges');
INSERT 937909 1
reedstrm=> select * from test2
reedstrm-> ;
b           |t
------------+---------
abdkrxf\002v|abdkrxfav
(1 row)

reedstrm=>

it won't take a byte with value \00, but otherwise might work. Interestingly
enough, the cut and paste into this email deleted the funny 50% gray box
that appeared after the 'xf' in the 't' column.

Ross
--
Ross J. Reedstrom, Ph.D., <reedstrm@rice.edu>
NSBRI Research Scientist/Programmer
Computer and Information Technology Institute
Rice University, 6100 S. Main St.,  Houston, TX 77005

Re: Apache::Session in PostgreSQL

From
Victor Manuel Jaquez Leal
Date:
Hi Again!

Thanks for all the people that helped me, I really appreciate it.

Finnally I spent my last saturday night trying to patch the DBIStore perl
module and I got this:

(I don't have probe it with non-scalar variables, so isn't a bullet-proof
patch yet... 8-)...

*** DBIStore.pm.old    Sat Apr  1 20:03:48 2000
--- DBIStore.pm    Sat Apr  1 20:03:12 2000
***************
*** 135,139 ****
      }

!     my $serialized = nfreeze $session->{data};

      $self->{insert_sth}->bind_param(1, $session->{data}->{_session_id});
--- 135,139 ----
      }

!     my $serialized = pack "u", nfreeze $session->{data};

      $self->{insert_sth}->bind_param(1, $session->{data}->{_session_id});
***************
*** 160,164 ****


!     my $serialized = nfreeze $session->{data};

      $self->{update_sth}->bind_param(1, length $serialized);
--- 160,164 ----


!     my $serialized = pack "u", nfreeze $session->{data};

      $self->{update_sth}->bind_param(1, length $serialized);
***************
*** 195,199 ****
      $self->{materialize_sth}->finish;

!     $session->{data} = thaw $results->[0];
  }

--- 195,199 ----
      $self->{materialize_sth}->finish;

!     $session->{data} = thaw unpack "u", $results->[0];
  }