--- loncom/auth/switchserver.pm 2019/08/01 15:20:06 1.35.2.1 +++ loncom/auth/switchserver.pm 2020/10/23 21:26:32 1.35.2.3 @@ -1,7 +1,7 @@ # The LearningOnline Network # Switch Servers Handler # -# $Id: switchserver.pm,v 1.35.2.1 2019/08/01 15:20:06 raeburn Exp $ +# $Id: switchserver.pm,v 1.35.2.3 2020/10/23 21:26:32 raeburn Exp $ # # Copyright Michigan State University Board of Trustees # @@ -128,6 +128,12 @@ sub handler { if ($env{'user.name'} eq 'public' && $env{'user.domain'} eq 'public') { my $url = $protocol.'://'.$switch_to.$r->uri; + unlink($handle); + #expire the cookie + my $c = new CGI::Cookie(-name => 'lonPubID', + -value => '', + -expires => '-10y',); + $r->header_out('Set-cookie' => $c); return &do_redirect($r,$url,1) } @@ -178,7 +184,16 @@ sub handler { } #remove session env, and log event - unlink($handle); + if (unlink($handle)) { + if ($env{'user.linkedenv'} ne '') { + my $lonidsdir=$r->dir_config('lonIDsDir'); + if (($env{'user.linkedenv'} =~ /^[a-f0-9]+_linked$/) && + (-l "$lonidsdir/$env{'user.linkedenv'}.id") && + (readlink("$lonidsdir/$env{'user.linkedenv'}.id") eq $handle)) { + unlink("$lonidsdir/$env{'user.linkedenv'}.id"); + } + } + } my %temp=('switchserver' => $now.':'.$env{'form.otherserver'}, $env{'form.role'}); &Apache::lonnet::put('email_status',\%temp); @@ -194,25 +209,29 @@ sub handler { &Apache::loncommon::content_type($r,'text/html'); - #expire the cookie - my $c = new CGI::Cookie(-name => 'lonID', - -value => '', - -expires => '-10y',); - $r->header_out('Set-cookie' => $c); - + #expire the cookies + my %cookies=CGI::Cookie->parse($r->header_in('Cookie')); + foreach my $name (keys(%cookies)) { + next unless ($name =~ /^lon(|S|Link|Pub)ID$/); + my $c = new CGI::Cookie(-name => $name, + -value => '', + -expires => '-10y',); + $r->headers_out->add('Set-cookie' => $c); + } if ($r->header_only) { $r->send_http_header; return OK; } # -------------------------------------------------------- Menu script and info - + # ---------------------------------------------------------------- Get handover - my $newcookieid; + my ($is_balancer,$setcookie,$newcookieid); my $only_body = 0; - my ($is_balancer,$posshost,$setcookie) = - &Apache::lonnet::check_loadbalancing($env{'user.name'},$env{'user.domain'}); + ($is_balancer,undef,$setcookie) = + &Apache::lonnet::check_loadbalancing($env{'user.name'},$env{'user.domain'},'switchserver'); if ($is_balancer && $setcookie && $env{'form.otherserver'}) { + # Set a balancer cookie unless browser already sent LON-CAPA load balancer # cookie which points at the target server my ($found_server,$balancer_cookie) = &Apache::lonnet::check_for_balancer_cookie($r,1); @@ -225,6 +244,9 @@ sub handler { $env{'user.name'},$env{'user.domain'}); } } + if ((!$is_balancer) && ($env{'request.balancercookie'})) { + $otherbalcookie = $env{'request.balancercookie'}; + } my %info=('ip' => $ENV{'REMOTE_ADDR'}, 'domain' => $env{'user.domain'}, @@ -234,6 +256,8 @@ sub handler { 'balancer' => $is_balancer); if ($newcookieid) { $info{'balcookie'} = $newcookieid; + } elsif ($otherbalcookie) { + $info{'otherbalcookie'} = $otherbalcookie; } if ($env{'form.origurl'}) { $info{'origurl'} = $env{'form.origurl'};