You are viewing a plain text version of this content. The canonical link for it is here.
Posted to modperl@perl.apache.org by Levente Janovszki <le...@bmk.hu> on 2004/04/19 18:01:33 UTC

strange Apache::Session problem

Hi,

I have a problem with Apache::Sesson, I'm using the following code under :

Server Version: Apache/1.3.28 (Linux/SuSE) PHP/4.3.3 mod_perl/1.28
perl-Apache-Session-1.54-439
mysql-4.0.15-9
perl-DBI-1.37-49
perl-Msql-Mysql-modules-1.2219-331

------ checkin.pl -----
#!/usr/bin/perl
use strict;

use CGI;
use Apache::Session::MySQL;
use Apache;

    my ( $r, $cookie, %session, $html_code, $session_cookie );

    $r = Apache->request;
    $cookie = $r->header_in('Cookie');
    $cookie =~ s/SESSION_ID=(\w*)/$1/;
    tie %session, 'Apache::Session::MySQL', $cookie, {
        DataSource => 'dbi:mysql:dbn', #these arguments are
        UserName   => 'useracc',         #required when using
        Password   => 'pass',           #MySQL.pm
        LockDataSource => 'dbi:mysql:dbn',
        LockUserName   => 'useracc',
        LockPassword   => 'pass'
    };
    $html_code =  "<html><body>";

    if ( $session{_session_id} eq $cookie ) {
        # ok session still alive
        $html_code .= "Welcome back, member!\n";
    } else {
        $session_cookie = "SESSION_ID=$session{_session_id};";
        $r->header_out("Set-Cookie" => $session_cookie);
        $html_code = "Welcome !";
    }
    $html_code .= "</body></html>";


    $r->send_http_header("text/html");
    $r->print( $html_code );
-------------------------------

the code works well.

But if I put the code into a sub block:
everything after      my ( $r, $cookie ... ) goes to sub checkin { ... }

so again ;)
---8<----
use Apache;

    my ( $r, $cookie, %session, $html_code, $session_cookie );
    &checkin;

    sub checkin {
      all the code
      ...
    }
---&<-- EOF

then the browser states in the status line:      waiting for 'servername'

if I check mysql I got:

host:~>mysqladmin proc  ...
+-----+------+-----------+-----+---------+------+-----------+--------------------------------------------------------------------------+
| Id  | User | Host      | db  | Command | Time | State     | Info
|
+-----+------+-----------+-----+---------+------+-----------+--------------------------------------------------------------------------+
| 563 | user | localhost | dbn | Sleep   | 370  |           |
|
| 564 | user | localhost | dbn | Sleep   | 370  |           |
|
| 565 | user | localhost | dbn | Query   | 367  | User lock | SELECT
GET_LOCK('Apache-Session-34c50ba6fcc9dadd7e716e3c2ad9b47b', 3600) |
| 567 | user | localhost |     | Query   | 0    |           | show
processlist                                                         |
+-----+------+-----------+-----+---------+------+-----------+--------------------------------------------------------------------------+
host:~>

I would like a reusable code so even put in a module, but until it's not
working in a sub ... ???


Thanks any help.

Levente

 | Levente Janovszki  | Bekes County Library          JUST 4 lines 4 U |
 | e-mail:levi@bmk.hu | Bekescsaba, Derkovits sor 1. HUNGARY Zip: 5600 |
 | Linux. Just use it |     *    The operating system collapsed    *   |
 | w/o fear of panic: |     *            OK    Cancel              *   |



-- 
Report problems: http://perl.apache.org/bugs/
Mail list info: http://perl.apache.org/maillist/modperl.html
List etiquette: http://perl.apache.org/maillist/email-etiquette.html


Re: strange Apache::Session problem

Posted by petersm <pe...@venzia.com>.
It seems that you are creating an unintended closure.
You should try declaring your vars inside of the sub 'checkin' and not outside
of it. This may not be your only problem but it's a good place to start.

Michael Peters
Venzia

Levente Janovszki wrote:
> 
>     my ( $r, $cookie, %session, $html_code, $session_cookie );
>     &checkin;
> 
>     sub checkin {
>       all the code
>       ...


-- 
Report problems: http://perl.apache.org/bugs/
Mail list info: http://perl.apache.org/maillist/modperl.html
List etiquette: http://perl.apache.org/maillist/email-etiquette.html