Re: Apache::Session and blessed references

2000-07-24 Thread Dylan Weed


Hi Jeffrey --

I'm pretty sure the problem is reproducible, but I'll rerun the dog 
test case tomorrow when I get a chance and let you know whether
things are still broken.  I'll also flesh it out into a complete program.

One unique thing about our configuration is that we're using Apache
1.3.12/mod_perl 1.24/Perl 5.6.0.  (We're also running under Linux and
using mysql locking if it matters.)  We're running Perl 5.6 because we
want to avoid the dying-in-an-eval bug in 5.005, but I can't say that I
trust 5.6 entirely -- it seems to still have a few nasty bugs.  Were you
running your latest tests under 5.6?  And do you think it's possible that
the bug might be a 5.6/Apache::Session interaction?

I'll write again tomorrow with more info.

Thanks,

 -- Dylan

On Sun, 23 Jul 2000, Jeffrey W. Baker wrote:

> On Wed, 31 May 2000, Dylan Weed wrote:
> 
> > 
> > I can't seem to get Apache::Session to save the blessedness of an object.  
> > Is this an oversight on my part, a limitation of the module, a limitation
> > of the database, or an intentional design decision?  
> > 
> > Conceptually, it seems as though an objects blessing is stored in a
> > different place in the Perl guts than its contents.  Is the problem just
> > that Apache::Session never saves this information to the database?
> > 
> > Has anyone else had occasion to do this?
> > 
> > 
> > 
> > An example in Perl:
> > 
> > # %session is a hash tied to a DB with Apache::Session 1.51
> > 
> > package main;
> > 
> > my $dog_obj = { name => 'Fido', breed => 'Mutt' };
> > 
> > bless ($dog_obj, 'Dog');
> > 
> > $dog_obj->bark();
> > $session{my_dog} = $dog_obj;
> > 
> > # The following line dies with an error:
> > #   cannot call method bark on unblessed reference.
> > $session{my_dog}->bark();
> > 
> > package Dog;
> > 
> > sub bark {
> > my $self = shift;
> > print "Woof! I'm $self->{name}";
> > }
> 
> 
> You know, I thought that there was a problem here when I first saw this
> email, but today I simply cannot reproduce it.  When I run the example
> program, everything barks.
> 
> Can you still reproduce this problem, and, if so, could you please send me
> a complete, working perl program as a demonstration?
> 
> Regards,
> Jeffrey
> 




Session-handling and multiple browser windows

2000-06-12 Thread Dylan Weed


I've run across a problem in the way I'm managing sessions, and I'm hoping
that someone else has encountered the same thing and come up with a smart
way to deal with it.  

I use Apache::Session and I associate each user with their respective
session hash by giving them a cookie.  The problem shows up because, in a
few places, I use the session hash to store page-specific state
information (the current page the user is on, for example).

When a user opens a second copy of the site in another browser window,
they still publish the same cookie.  Both the windows are then associated
with the same session.  This means that the two windows can trash each
other's page-specific state and cause all sorts of undefined behavior.

It seems to me like there are several possible solutions:

1.  Stop the user from ever having the site open in more than one
window.

2.  Somehow allocate the new window it's own session.

3.  Don't store any page-specific state in the session hash; limit the
information that the session hash contains to state that applies to the
entire session.

Option three (removing all page-specific state from the session hash)
seems like the right thing to do.  I'd like to avoid it if possible,
however, because it means passing more information through URLs and having
to secure it.  Have other people encountered this problem, and are there
smart ways to do option 1 or option 2?

(If it matters, I'm using HTML::Mason as my templating engine.)

-- Dylan




Apache::Session and blessed references

2000-05-31 Thread Dylan Weed


I can't seem to get Apache::Session to save the blessedness of an object.  
Is this an oversight on my part, a limitation of the module, a limitation
of the database, or an intentional design decision?  

Conceptually, it seems as though an objects blessing is stored in a
different place in the Perl guts than its contents.  Is the problem just
that Apache::Session never saves this information to the database?

Has anyone else had occasion to do this?



An example in Perl:

# %session is a hash tied to a DB with Apache::Session 1.51

package main;

my $dog_obj = { name => 'Fido', breed => 'Mutt' };

bless ($dog_obj, 'Dog');

$dog_obj->bark();
$session{my_dog} = $dog_obj;

# The following line dies with an error:
#   cannot call method bark on unblessed reference.
$session{my_dog}->bark();

package Dog;

sub bark {
my $self = shift;
print "Woof! I'm $self->{name}";
}