Bonjour a tous,

Je debute en perl. J'ai du code qui ne fais pas correctement son travail (code Apache). En effet, il doit purger les vieilles sessions sur notre serveur or cela ne fonctionne pas et pour cause:

J'ai un table (@t) d'identifiant (id=nom du fichier de session sur le serveur):

f
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
or my $id (@t) {
    my %h;
    eval { tie %h, 'Apache::Session::File', $id, $conf->{globalStorageOptions} };
    if ($@) {
        next;
    }
    tied(%h)->delete;
}
Jusque la tout va bien, puis la fonction remove() du package 'Apache::Session::Store::File' est appelée:

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
sub remove {
    my $self    = shift;
    my $session = shift;
 
    my $directory = $session->{args}->{Directory} || $Apache::Session::Store::File::Directory;
 
    if ($self->{opened}) {
        CORE::close $self->{fh};
        $self->{opened} = 0;
    }
 
    my $file = $directory.'/'.$session->{data}->{_session_id};
        print "File = $file\n";
if (-e $file) {
        unlink ($file) ||
            die "Could not remove file $file: $!";
    }
    else {
        die "Object does not exist in the data store";
    }
}
C'est ici que le bas blesse, il essaie de supprimer un fichier qui n'existe pas. Il va recuperer la variable '_session_id' or elle ne correspond pas au nom du fichier ($id)

Comment puis-je recuper ma variable $id dans le remove()? Est-ce seulement possible :S ?

Merci de votre aide !

e.