Re: Apache::Session and blessed references
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
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
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}"; }