[Perl] Session Handling

MaxFleit

web2systems
ID: 308871
L
15 Januar 2008
293
28
Hi ihr Progger,
ich habe ein kleines Problem in Perl/PHP. Ich erzeuge über PHP eine Session die abegrufen wird, wenn jemand auf eine geschütze Seite zugreifen will.

Nun will ich ein Perl Script was zu dem Hauptscript dazugehört auch schützen. Mit http:request funktioniert es net, da die Anfrage, dann ja vom Server kommen würde.

Es gibt ein Session Handling Package, aber das funktioniert nicht.

Code:
<h1>Software error:</h1>
<pre>/tmp/sess_b4a94051807e73a0e3a57e18aa71b614: No such file or directory at feed_ersteller.pl line 21
</pre>
<p>

Link zum Package:https://search.cpan.org/~miyagawa/PHP-Session-0.27/lib/PHP/Session.pm

Vll. kann mir ja wer helfen!

Gruss
MaxFleit
 
Ohne Code - deines pl-Skriptes - wiird dir auch keiner helfen können ;--)

Die Glaskugel ist gerade beschlagen :)
 
Zuletzt bearbeitet:
Hier das Script, dass die oben stehende Fehlermeldung auslöst:

Code:
use CGI::Lite;
use PHP::Session;
my $session_name = 'PHPSESSID'; # change this if needed
my $user="";
print "Content-type: text/plain\n\n";
  
my $cgi = new CGI::Lite;
  
my $cookies = $cgi->parse_cookies;
if ($cookies->{$session_name}) {
     my $session = PHP::Session->new($cookies->{$session_name});
     # now, try to print uid variable from PHP session
     $user=($session->get('user_id'));
}
 
Was ist denn in Zeile 21?

sicher, das die session auch unter 'PHPSESSID' läuft?
Lass dir doch erstmal mit session_name() ausgeben, wie die session tatsächlich heisst...

[Edit] bau auch mal am Anfang
Code:
use strict;
use warnings;
ein - falls nicht schon vorhanden ;)

[EDIT 2] Sind denn auf dem Webspace diese Perl-Module (PHP::Session und CGI::Lite) installiert - oder testest du es erst lokal?
Module auch lokal installiert ?
 
Zuletzt bearbeitet:
Das Script bis Zeile 26

Code:
#!/usr/bin/perl
print "Content-Type: text/plain\n\n"; 
use CGI::Carp qw(fatalsToBrowser);


use CGI;
use LWP::Simple;
require 'cgi-lite.pm';
require 'php-session.pm';
require 'rss.pm';


my $session_name = 'PHPSESSID'; # change this if needed
my $user="";
print "Content-type: text/plain\n\n";
  
my $cgi = new CGI::Lite;
  
my $cookies = $cgi->parse_cookies;
if ($cookies->{$session_name}) {
     my $session = PHP::Session->new($cookies->{$session_name});
     # now, try to print uid variable from PHP session
     $user=($session->get('user_id'));
 
In Zeile 21 verwendet er das erste Mal tatsächlich das 'php-session.pm'.
Ist das Modul installiert und zur Laufzeit innerhalb des @INC-Zugriffsbereiches von Perl ? Schreibweise?
Lass dir den @INC mal anzeigen und kontrolliere das ;-)
 
Mal ne andere Idee. Unter welchem System versuchst du
das zum Laufen zu bekommen? Existiert die Session-Datei
und/oder das Verzeichnis /tmp/sess_* überhaupt?
 
So das mit dem Pfad funzt jetzt aber es kommt jetzt immer Permission Denied, wenn ich die perl jetzt ausführen will.

Jemand ne Idee?
 
Gib doch mal ein paar Infos zur Umgebung.
Das is ja schlimm, dass man dir alles aus den Fingern ziehen muss. ;)

Welches System? Wie sieht die Pfadangabe aus?


Ich tippe einfach mal etwas blind darauf, dass du ein Windows-
System hast und die Pfadangaben im Windows-Stil mit "\" und
nicht im Apache-Stil mit "/" definiert hast. :think:
 
Ok sorry:

System: Debian Etch

Perl liegt im Ordner /html/cgi-bin
Temps werden jetzt hier gespeichert /html/tmp

Code:
my $cookies = $cgi->parse_cookies;
if ($cookies->{$session_name}) {
     my $session = PHP::Session->new($cookies->{$session_name}, {save_path => '/var/www/web35/html/tmp'});
     # now, try to print uid variable from PHP session
     $user=($session->get('user_id'));
}

So sieht das ganze jetzt aus.

Aber Permission Denied!
 
Debug das ganze doch mal!

Schau ins Error-Log, setz Zeilenweise Ausgaben um zu
schauen wie weit das Skript sauber läuft, lass einzelne
Variablen ausgeben und schau nach, ob sie korrekte
Werte enthalten, usw.

Debugging gehört zum Alltag eines Programmierers,
also lerne es und gewöhne dich daran. ;)