All,

I've Googled repeatedly, and RTFMed, and I've reached a point where I have to ask for help.

I have a Catalyst Web App that requires users to log in before they can do anything (it's a front end for managing mailing list subscriptions).

This runs on Apache 1.3/mod_perl 1/perl 5.8.8/MySQL 5.0 on SLES 10. Apache, perl and mod_perl are compiled from source, not the distribution versions.

The problem is that as the day progresses, and the application sees more and more use, login behavior becomes inconsistent.

It starts out working flawlessly. Then, after a while, valid logins start to occasionally fail. Trying again gets you in - at the start. As time passes, the problem gets progressively worse and it eventually gets to the point where people quit trying because the success rate for logging in drops to 10% or less.

By fail, I mean you go to the log in screen, put in a valid username and password combination, and then get seamlessly redirected to the log in screen, as if you had just arrived fresh to the app.

Restarting Apache solves the problem, at least for a while. And then things begin to degrade again...

I've verified that the problem is not end user error. Once you get it to recognize your login, the system work fine.

Other Web Apps I've written, using HTML::Mason and running on this exact same server under mod_perl do not exhibit this behavior.

I've checked the Apache error log, and I can't find any related errors.

I'm using the following plug-in for authentication:

         Authentication
                 Session
                        Session::Store::FastMmap
                        Session::State::Cookie


The problem did not appear in testing, only in production.

Any ideas on where to look, or what to try?

FWIW, here's the login controller code (no promises on it being great - programming is something I've learned in self-defense). The controller handles log ins for both the regular and admin side of the application. First it checks the regular users realm, and, if that fails, then the admin users realm (two separate databases) .



package esubscription::Controller::Login;

use strict;
use warnings;
use base 'Catalyst::Controller';



sub index : Private {
    my ( $self, $c ) = @_;

        # Get the username and password from form
        my $login = $c->request->params->{login} || "";
        my $password = $c->request->params->{password} || "";

        # If the username and password values were found in form
        if ($login && $password) {
            # Attempt to log the user in
if ( $c->authenticate({login => $login, password => $password}) ) {
                # If successful, then let them use the application
                $c->response->redirect($c->uri_for('/'));
                return;
            } else {

if ( $c->authenticate({login => $login, password => $password}, 'admin') ) {
                                        
$c->response->redirect($c->uri_for('/admin/'));
                                        return;

                }
                
                else { # Set an error message

                 $c->stash->{message} = "Bad username or password.";
                 $c->stash->{login} = "$login";
                }
            }
        }

        # If either of above don't work out, send to the login page
        $c->stash->{template} = 'templates/forms/login_form.mas';
}



1;



Also, there's this snippet in the root controller that handles checking for valid user:

        # If a user doesn't exist, force login
        
        if (!$c->user_exists) {
        
                $c->response->redirect($c->uri_for('login'));
# Return 0 to cancel 'post-auto' processing and prevent use of application
                return 0;
        }



Thanks for the help!


Paul Cory
WCPSS Webmaster
[EMAIL PROTECTED]




_______________________________________________
List: Catalyst@lists.scsys.co.uk
Listinfo: http://lists.scsys.co.uk/cgi-bin/mailman/listinfo/catalyst
Searchable archive: http://www.mail-archive.com/catalyst@lists.scsys.co.uk/
Dev site: http://dev.catalyst.perl.org/

Reply via email to