/ Forside / Teknologi / Udvikling / Perl / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
Perl
#NavnPoint
bjarneA 141
poul_from 50
soccer 30
Nicknack 14
Tmpj 0
Sætte en cookie og samtidigt redirecte med~
Fra : Thomas Skyt


Dato : 18-07-02 06:46

Hej,

hvordan kan jeg sætte en cookie (hvilket jo er det første der skal ske,
da den skal i headeren af http-responsen) og sende 302-redirect?

Jeg har et lille login- og logout-script, som begge baserer på at de
hhv. sender og sletter en cookie, hvorefter de sender brugeren tilbage
til selve websiden, hvor de blev udført fra.

Jeg ville gerne have det transparent, således at brugeren reelt set ikke
får at se at han rent faktisk var på en "fremmed" side for at logge ind /
ud.

Når jeg forsøger at sætte cookies og redirect på nedenstående måde fører
det blot til at redirecten bliver udført - cookien bliver ikke sat. Hvis
jeg bytter om på de to linier, sker der ikke en dyt.

------ kode ------
print $cookieqry->header(-cookie=>$cookie,-nph=>0);
print $redirectqry->redirect(-uri=>"http://sofagang.dk/start.shtml",-nph=>0);
------ kode slut ------

Er der nogen der har en idé eller et andet løsningsforslag?

/Thomas Skyt

 
 
wulff (18-07-2002)
Kommentar
Fra : wulff


Dato : 18-07-02 13:13

On Thu, 18 Jul 2002 07:46:19 +0200, Thomas Skyt <thomas@sofagang.dk>
wrote:
>hvordan kan jeg sætte en cookie (hvilket jo er det første der skal ske,
>da den skal i headeren af http-responsen) og sende 302-redirect?
>Er der nogen der har en idé eller et andet løsningsforslag?

Du kan tage et kig på dette afsnit af mod_perl dokumentationen:

http://perl.apache.org/docs/1.0/guide/snippets.html#Sending_Cookies_in_REDIRECT_Response


hth
wulff

Thomas Skyt (18-07-2002)
Kommentar
Fra : Thomas Skyt


Dato : 18-07-02 15:00

On Thu, 18 Jul 2002 14:13:27 +0200, wulff wrote:

> On Thu, 18 Jul 2002 07:46:19 +0200, Thomas Skyt <thomas@sofagang.dk>
> wrote:
>>hvordan kan jeg sætte en cookie (hvilket jo er det første der skal ske,
>>da den skal i headeren af http-responsen) og sende 302-redirect? Er der
>>nogen der har en idé eller et andet løsningsforslag?
>
> Du kan tage et kig på dette afsnit af mod_perl dokumentationen:
>
> http://perl.apache.org/docs/1.0/guide/snippets.html#Sending_Cookies_in_REDIRECT_Response

Tak!!

Det var lige hvad jeg manglede.

/Thomas Skyt

Thomas Skyt (18-07-2002)
Kommentar
Fra : Thomas Skyt


Dato : 18-07-02 15:56

On Thu, 18 Jul 2002 14:13:27 +0200, wulff wrote:

> On Thu, 18 Jul 2002 07:46:19 +0200, Thomas Skyt <thomas@sofagang.dk>
> wrote:
>>hvordan kan jeg sætte en cookie (hvilket jo er det første der skal ske,
>>da den skal i headeren af http-responsen) og sende 302-redirect? Er der
>>nogen der har en idé eller et andet løsningsforslag?
>
> Du kan tage et kig på dette afsnit af mod_perl dokumentationen:
>
> http://perl.apache.org/docs/1.0/guide/snippets.html#Sending_Cookies_in_REDIRECT_Response

Nu hvor jeg kører med mod_perl - er der mulighed for at sætte globale
variabler i en af filerne, således at de er tilgængelige fra alle andre
scripts, der derefter "#exec cgi"'s fra shtml-filen?

Grunden til dette er at jeg ville samle indstillingen af faste variabler
(brugernavn, kodeord, database o.l. til MySQL) i een fil og indlæse den
fra begyndelsen, fremfor at definere det påny i hver evigt eneste fil.

/Thomas Skyt

wulff (18-07-2002)
Kommentar
Fra : wulff


Dato : 18-07-02 17:36

On Thu, 18 Jul 2002 16:56:00 +0200, Thomas Skyt <thomas@sofagang.dk>
wrote:
>Nu hvor jeg kører med mod_perl - er der mulighed for at sætte globale
>variabler i en af filerne, således at de er tilgængelige fra alle andre
>scripts, der derefter "#exec cgi"'s fra shtml-filen?

Én måde at gøre det på, er at bruger PerlSetVar i din httpd.conf:

http://perl.apache.org/docs/1.0/guide/config.html#PerlSetVar_and_PerlAddVar

*host*RTFM*host*


/wulff

Thomas Skyt (18-07-2002)
Kommentar
Fra : Thomas Skyt


Dato : 18-07-02 18:29

On Thu, 18 Jul 2002 18:35:48 +0200, wulff wrote:

> On Thu, 18 Jul 2002 16:56:00 +0200, Thomas Skyt <thomas@sofagang.dk>
> wrote:
>>Nu hvor jeg kører med mod_perl - er der mulighed for at sætte globale
>>variabler i en af filerne, således at de er tilgængelige fra alle andre
>>scripts, der derefter "#exec cgi"'s fra shtml-filen?
>
> Én måde at gøre det på, er at bruger PerlSetVar i din httpd.conf:
>
> http://perl.apache.org/docs/1.0/guide/config.html#PerlSetVar_and_PerlAddVar
>
> *host*RTFM*host*

Undskyld, undskyld, undskyld.

Jeg har kodet siden igår ved 12-tiden ... jeg mangler søvn og min
tft-skærm flimrer allerede ad helvede til ... mine øjne kan bare ikke
mere, men jeg forsøger at rtfm'e

/Thomas Skyt

wulff (18-07-2002)
Kommentar
Fra : wulff


Dato : 18-07-02 20:15

On Thu, 18 Jul 2002 19:29:05 +0200, Thomas Skyt <thomas@sofagang.dk>
wrote:
>> *host*RTFM*host*
>Jeg har kodet siden igår ved 12-tiden ... jeg mangler søvn og min
>tft-skærm flimrer allerede ad helvede til ... mine øjne kan bare ikke
>mere, men jeg forsøger at rtfm'e

Hmmm... Måske er det på tide med en lille pause:

http://www.caffeinearchive.com/



Thomas Skyt (18-07-2002)
Kommentar
Fra : Thomas Skyt


Dato : 18-07-02 18:37

On Thu, 18 Jul 2002 18:35:48 +0200, wulff wrote:

> On Thu, 18 Jul 2002 16:56:00 +0200, Thomas Skyt <thomas@sofagang.dk>
> wrote:
>>Nu hvor jeg kører med mod_perl - er der mulighed for at sætte globale
>>variabler i en af filerne, således at de er tilgængelige fra alle andre
>>scripts, der derefter "#exec cgi"'s fra shtml-filen?
>
> Én måde at gøre det på, er at bruger PerlSetVar i din httpd.conf:
>
> http://perl.apache.org/docs/1.0/guide/config.html#PerlSetVar_and_PerlAddVar
>
> *host*RTFM*host*

Nådigste herre - vil der ikke være sikkerhedsproblemer, hvis jeg
begynder at lagre kodeord i sådanne variabler?

I så fald vil variablerne jo være tilgængelige for alle og enhver!

Har jeg ret i at

push @{ $Location{"/"}->{PerlSetVar} }, [ foo => 'bar' ];

skal opfattes som syntaxen for at sætte en sådan variabel i perl?

/Thomas Skyt

wulff (18-07-2002)
Kommentar
Fra : wulff


Dato : 18-07-02 20:25

On Thu, 18 Jul 2002 19:36:32 +0200, Thomas Skyt <thomas@sofagang.dk>
wrote:
>Nådigste herre - vil der ikke være sikkerhedsproblemer, hvis jeg
>begynder at lagre kodeord i sådanne variabler?

Det burde kunne klares med en omgang chmod'ing/chown'ing. Så vidt jeg
kan se, er det kun root og evt. brugere i en admin-gruppe, der har
behov for læse/skrive adgang til filerne i /etc/httpd/conf (afhængigt
af hvordan du starter din apache).

>Har jeg ret i at
> push @{ $Location{"/"}->{PerlSetVar} }, [ foo => 'bar' ];
>skal opfattes som syntaxen for at sætte en sådan variabel i perl?

Ja, i en <perl></perl> blok i httpd.conf.


/wulff

Thomas Skyt (18-07-2002)
Kommentar
Fra : Thomas Skyt


Dato : 18-07-02 20:00

On Thu, 18 Jul 2002 18:35:48 +0200, wulff wrote:

> On Thu, 18 Jul 2002 16:56:00 +0200, Thomas Skyt <thomas@sofagang.dk>
> wrote:
>>Nu hvor jeg kører med mod_perl - er der mulighed for at sætte globale
>>variabler i en af filerne, således at de er tilgængelige fra alle andre
>>scripts, der derefter "#exec cgi"'s fra shtml-filen?
>
> Én måde at gøre det på, er at bruger PerlSetVar i din httpd.conf:
>
> http://perl.apache.org/docs/1.0/guide/config.html#PerlSetVar_and_PerlAddVar

Det virker ikke efter hensigten - min intention er at kunne sætte
variabler fra perl-scriptet af, ikke at skulle sætte dem fra httpd.conf.

Er der virkelig ikke nogen "simpel" løsning på det?

/Thomas Skyt

wulff (18-07-2002)
Kommentar
Fra : wulff


Dato : 18-07-02 20:27

On Thu, 18 Jul 2002 20:59:49 +0200, Thomas Skyt <thomas@sofagang.dk>
wrote:
>Det virker ikke efter hensigten - min intention er at kunne sætte
>variabler fra perl-scriptet af, ikke at skulle sætte dem fra httpd.conf.
>Er der virkelig ikke nogen "simpel" løsning på det?

Well, du kunne jo også lave et konfigurations-script, som du kan kalde
fra de andre scripts. Men så risikerer du selvfølgelig stadigvæk at
andre kan se dine database-adgangskoder o.l.

/wulff

Thomas Skyt (18-07-2002)
Kommentar
Fra : Thomas Skyt


Dato : 18-07-02 21:05

On Thu, 18 Jul 2002 21:27:04 +0200, wulff wrote:

> On Thu, 18 Jul 2002 20:59:49 +0200, Thomas Skyt <thomas@sofagang.dk>
> wrote:
>>Det virker ikke efter hensigten - min intention er at kunne sætte
>>variabler fra perl-scriptet af, ikke at skulle sætte dem fra httpd.conf.
>>Er der virkelig ikke nogen "simpel" løsning på det?
>
> Well, du kunne jo også lave et konfigurations-script, som du kan kalde
> fra de andre scripts. Men så risikerer du selvfølgelig stadigvæk at
> andre kan se dine database-adgangskoder o.l.

Det var sådan set sådan noget jeg havde tænkt på, men jeg har endnu ikke
kunnet finde nogen fyldestgørende howto til hvordan jeg gør det - under
php var det jo blot include('filnavn') - selvom det ikke altid virkede
helt efter hensigten.

Jeg tænkte på noget i retning af use MitModul; eller sårn - hvorledes
ville jeg kunne gøre det?

/Thomas Skyt

wulff (19-07-2002)
Kommentar
Fra : wulff


Dato : 19-07-02 07:21

On Thu, 18 Jul 2002 22:04:54 +0200, Thomas Skyt <thomas@sofagang.dk>
wrote:
>> Well, du kunne jo også lave et konfigurations-script, som du kan kalde
>> fra de andre scripts. Men så risikerer du selvfølgelig stadigvæk at
>> andre kan se dine database-adgangskoder o.l.
>Det var sådan set sådan noget jeg havde tænkt på, men jeg har endnu ikke
>kunnet finde nogen fyldestgørende howto til hvordan jeg gør det - under
>php var det jo blot include('filnavn') - selvom det ikke altid virkede
>helt efter hensigten.
>
>Jeg tænkte på noget i retning af use MitModul; eller sårn - hvorledes
>ville jeg kunne gøre det?

Det var én måde at gøre det på. Du kan også prøve at kigge på denne
opskrift fra Perl Cookbook, som tilfældigvis er frit tilgængelig:

http://www.oreilly.com/catalog/cookbook/chapter/ch08.html#chap08_reading_5


hth
/wulff


Ask Bjoern Hansen (20-07-2002)
Kommentar
Fra : Ask Bjoern Hansen


Dato : 20-07-02 05:59

Thomas Skyt <thomas@sofagang.dk> wrote in message news:<pan.2002.07.18.20.59.48.674172.6964@sofagang.dk>...

> Det virker ikke efter hensigten - min intention er at kunne sætte
> variabler fra perl-scriptet af, ikke at skulle sætte dem fra httpd.conf.
>
> Er der virkelig ikke nogen "simpel" løsning på det?

En populaer maade er at lave et lille modul der "wrapper"
DBI->connect. Jeg har posted en variant jeg ofte bruger nedenfor.

brug det som
use Develooper::DB qw(db_open);

my $dbh = db_open; # default databasen
my $dbh_foo = db_open('foo'); # foo databasen


- ask

package Develooper::DB;
use strict;
use DBI;
use Carp;

use Exporter;
use vars qw(@ISA @EXPORT);
@EXPORT = qw(db_open);
@ISA = qw(Exporter);

my %dbh = ();

sub read_db_connection_parameters {
# XXX could read from a file...
return ("localhost",
"dbi:mysql:database=perlweb;host=x1.develooper.com;user=perlweb;;mysql_read_default_file=/home/perlweb/.my.cnf",
"perlweb", "xxXXXxx");
}

sub db_open {
my ($db, $attr) = @_;
$db ||= 'perlweb';

$attr = {} unless ref $attr;

carp "$$ Develooper::DB:en_db called during server startup" if
$Apache::Server::Starting;

my $lock = delete $attr->{lock};
my $lock_timeout = delete $attr->{lock_timeout};
my $lock_name = delete $attr->{lock_name};

# default to RaiseError=>1 but allow caller to override
my $RaiseError = $attr->{RaiseError};
$RaiseError = (defined $RaiseError) ? $RaiseError : 1;

my $dbh = $dbh{$db};

unless ($dbh and $dbh->ping()) {
my ($host, @args) = read_db_connection_parameters();

$dbh = DBI->connect(@args, {
%$attr,
RaiseError => 0, # override RaiseError for connect
AutoCommit => 1, # make it explicit
});

if ($dbh) {
$dbh->{RaiseError} = $RaiseError;
$dbh{$db} = $dbh;
}
else {
carp "Could not open $args[0] on $host: $DBI::errstr" if
$RaiseError;
# fall through if not RaiseError
}
}

if ($lock) {
$lock_timeout = 180 unless $lock_timeout;
$lock_name = $0 unless $lock_name;
my $lockok = $dbh && $dbh->do(qq[SELECT
GET_LOCK("$lock_name",$lock_timeout)]);
croak "Unable to get $lock_name lock for $0\n" unless $lockok;
}

# return handle; undef if connect failed and RaiseError is false
return $dbh;
}

END {
local ($!, $?);
while (my ($db, $handle) = each %dbh) {
$handle->disconnect() if $handle->{Active};
delete $dbh{$db};
}
}

1;


--
http://askbjoernhansen.com/

Søg
Reklame
Statistik
Spørgsmål : 177579
Tips : 31968
Nyheder : 719565
Indlæg : 6409073
Brugere : 218888

Månedens bedste
Årets bedste
Sidste års bedste