Author: spadkins
Date: Thu Sep 13 13:04:57 2007
New Revision: 9943
Modified:
p5ee/trunk/App-Context/lib/App/Context.pm
Log:
Changes for application login logoff
Modified: p5ee/trunk/App-Context/lib/App/Context.pm
==============================================================================
--- p5ee/trunk/App-Context/lib/App/Context.pm (original)
+++ p5ee/trunk/App-Context/lib/App/Context.pm Thu Sep 13 13:04:57 2007
@@ -1701,19 +1701,63 @@
my ($self, $session_id, @service_types) = @_;
$session_id = "default" if (!defined $session_id || $session_id ne "");
my $session = $self->{sessions}{$session_id};
- if ($#service_types > -1) {
- foreach my $service_type (@service_types) {
+ if ($#service_types == -1) {
+
+ my %service_type_seen;
+ foreach my $service_type (keys %{$session->{store}}) {
+ $service_type_seen{$service_type} = 1;
+ push (@service_types, $service_type);
+ }
+
+ foreach my $service_type (keys %{$session->{cache}}) {
+ if (!$service_type_seen{$service_type}) {
+ push (@service_types, $service_type);
+ }
+ }
+ }
+
+ foreach my $service_type (@service_types) {
+ if ($service_type ne "SessionObject") {
delete $session->{store}{$service_type};
delete $session->{cache}{$service_type};
}
- }
- else {
- delete $self->{sessions}{$session_id};
- if ($session eq $self->{session}) {
- delete $self->{session};
- $self->{session} = $self->session($session_id);
+ else {
+ my $special_attrib = "ctype|cname|u|p|eu|theme";
+ my ($services, $default_session_object);
+ $services = $session->{store}{SessionObject};
+ if ($services) {
+ foreach my $so_name (keys %$services) {
+ delete $services->{$so_name} if ($so_name ne "default");
+ }
+ }
+ $services = $session->{cache}{SessionObject};
+ if ($services) {
+ foreach my $so_name (keys %$services) {
+ delete $services->{$so_name} if ($so_name ne "default");
+ }
+ }
+ $default_session_object =
$session->{store}{SessionObject}{default};
+ if ($default_session_object) {
+ foreach my $attrib (keys %$default_session_object) {
+ delete $default_session_object->{$attrib} if ($attrib !~
/^$special_attrib$/);
+ }
+ }
+ $default_session_object =
$session->{cache}{SessionObject}{default};
+ if ($default_session_object) {
+ foreach my $attrib (keys %$default_session_object) {
+ delete $default_session_object->{$attrib} if ($attrib !~
/^$special_attrib$/);
+ }
+ }
}
}
+
+ #else {
+ # delete $self->{sessions}{$session_id};
+ # if ($session eq $self->{session}) {
+ # delete $self->{session};
+ # $self->{session} = $self->session($session_id);
+ # }
+ #}
&App::sub_exit() if ($App::trace);
}