webForumDet fria alternativet

Cookies

2 svar · 355 visningar · startad av nordan

nordanMedlem sedan juni 2000949 inlägg
#1

Tjena Hej!
Är det någon som har lust att förklara för mig VÄLDIGT ENKELT hur man skicka värden till en cookie?
Typ:
Om man har ett formulär som man kan
välja bgcolor och skicka in sitt användar namn.
Mvh
Nordan

RobbanMedlem sedan dec. 19992 555 inlägg
#2
#!/usr/bin/perl -w

use CGI::Cookie;

$cookie1 = new CGI::Cookie(-name => 'username', -value => 'Oskar', -expires => '+6M');

$cookie2 = new CGI::Cookie(-name => 'bgcolor', -value => '#FFFFFF', -expires => '+6M');

print "Set-Cookie: $cookie1\n";
print "Set-Cookie: $cookie2\n";
print "Content-Type: text/html\n\n";

... resten av sidan ...

http://ftp.sunet.se/pub/lang/perl/CPAN/doc/manual/html/lib/CGI/Cookie.html

------------------
Robban < robban@lipogram.com >

demo
#3

Hej!

Har inte tidigare funderat så mycket på hantering av cookies. Men när det nu fanns ett exempel så tänkte jag att jag skulle prova på detta.

Prövade ovanstående kod, men fick det inte att fungera.

Gav mig dock inte så lätt utan läste lite i den länk som fann ovan, och provade lite på egen hand.

Inte heller detta fick jag att fungera, trots att kodraderna var få och att jag tyckte jag hade kontroll på vad jag gjorde.

Men skam den som ger sig. ;)

Kopierade då av ett cookieprogram som medföljde på en CGI-CD:rom, som i sin tur medföljde en CGI-bok som jag tidigare köpt.

Trots att jag kopierade av koden rakt av, så fungerade det ändå inte.

Nedanstående kod ur boken skall göra så att man får upp ett formulär där man fyller i sitt namn. Därefter får användaren en cookie innehållande sitt namn. När användaren besöker sidan en andra gång, känner programmet av om cokkie finns, och hälsar då användaren välkommen med sitt namn.

Programkoden nedan fungerar i och för sig, och inga felmeddelanden ges. Dock så hamnar ingen cookies på datorn, trots korrekt inställnin i webbläsaren.

Då inga av mina cookieförsök har slagit väl ut, undrar jag vad som är fel?

Mvh,Demo

#!/usr/local/bin/perl -w

sub tolka_formular; sub expires_strang;

tolka_formular;

# Om användaren inte har fyllt i formuläret, visa det
if (!$form{'namn'})
{
	print <<_HTML_;
Content-Type: text/html

<TITLE>Vad heter du</TITLE>
<FORM METHOD=GET>
Vad heter du? <INPUT TYPE=text NAME=namn>
</FORM>
_HTML_
}
else
{
	# Eftersom det här bara är ett skoj-program sätter vi 
	# bäst-före-datumet till 30 dagar.
	$expires = expires_strang(30);

	# Koda speciella tecken. Notera att % också måste kodas 
	# eftersom det har en speciell betydelse i kodningen. 
	$kodat_namn = $form{'namn'};
	$kodat_namn =~ s/([=; \n%])/sprintf("%%%02X", ord($1))/eg;

	print <<_HTML_;
Set-Cookie: namn=$kodat_namn; $expires;
Content-Type:text/html

<TITLE>Hejsan $form{'namn'}!</TITLE>
	Hejsan $form{'namn'}!
_HTML_
}

sub tolka_formular
{
	my ($buffer, $namn, $varde, @par);

	if ($ENV{'REQUEST_METHOD'} eq 'GET')
		{$buffer = $ENV{'QUERY_STRING'}}
	elsif ($ENV{'REQUEST_METHOD'} eq 'POST')
	{
		$buffer="";
		read(STDIN, $buffer, $ENV{'CONTENT_LENGTH'});
	}
	else
	{
		die ("Content-Type: text/plain\n\n".
			 "REQUEST_METHOD måste vara GET eller POST!");
	}

	# Omvandla + till mellanslag
	$buffer =~ tr/+/ /;

	# Dela upp i namn/värde par
	@par = split(/&/, $buffer);

	# Loopa över alla par
	foreach $par (@par)
	{
		# Dela upp paret i namn och värde
		($namn, $varde) = split(/=/, $par);

		# Tolka kodade specialtecken
		$namn=~ s/%([A-F0-9]{2})/chr(hex($1))/egi;
		$varde=~ s/%([A-F0-9]{2})/chr(hex($1))/egi;

		# Om den redan existerar lägg till med radmatning 
		# emellan, lägg bara till den i annat fall.
		if ($form{$namn})
			{$form{$namn} .= "\n$varde"}
		else
			{$form{$namn} = $varde;}
	}
}

sub expires_strang
{
	my (@Wdy, @Mon, $tid, @tid);

	@Wdy = ('Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat');
	@Mon = ('Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun',
			'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec');

	# 3600 sekunder på en timme, 24 timmar på en dag
	$tid = time + $_[0] * 3600 * 24;

	@tid = gmtime $tid;
	sprintf ("expires=%s, %02d-%s-%02d %02d:%02d:%02d GMT",
		$Wdy[$tid[6]], $tid[3], $Mon[$tid[4]], $tid[5],
		$tid[2], $tid[1], $tid[0]);
}

[Redigerat av demo den 27 jun 2000]

[Redigerat av demo den 27 jun 2000]

132 ms totalt · 3 externa anrop · v20260731065814-full.0e50b1ef
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
129 ms — hämta tråd, inlägg och bilagor (db)