⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ch19_11.htm

📁 By Tom Christiansen and Nathan Torkington ISBN 1-56592-243-3 First Edition, published August 1998
💻 HTM
字号:
<HTML><HEAD><TITLE>Recipe 19.10. Managing Cookies (Perl Cookbook)</TITLE><METANAME="DC.title"CONTENT="Perl Cookbook"><METANAME="DC.creator"CONTENT="Tom Christiansen &amp; Nathan Torkington"><METANAME="DC.publisher"CONTENT="O'Reilly &amp; Associates, Inc."><METANAME="DC.date"CONTENT="1999-07-02T01:45:43Z"><METANAME="DC.type"CONTENT="Text.Monograph"><METANAME="DC.format"CONTENT="text/html"SCHEME="MIME"><METANAME="DC.source"CONTENT="1-56592-243-3"SCHEME="ISBN"><METANAME="DC.language"CONTENT="en-US"><METANAME="generator"CONTENT="Jade 1.1/O'Reilly DocBook 3.0 to HTML 4.0"><LINKREV="made"HREF="mailto:online-books@oreilly.com"TITLE="Online Books Comments"><LINKREL="up"HREF="ch19_01.htm"TITLE="19. CGI Programming"><LINKREL="prev"HREF="ch19_10.htm"TITLE="19.9. Debugging the Raw HTTP Exchange"><LINKREL="next"HREF="ch19_12.htm"TITLE="19.11. Creating Sticky Widgets"></HEAD><BODYBGCOLOR="#FFFFFF"><img alt="Book Home" border="0" src="gifs/smbanner.gif" usemap="#banner-map" /><map name="banner-map"><area shape="rect" coords="1,-2,616,66" href="index.htm" alt="Perl Cookbook"><area shape="rect" coords="629,-11,726,25" href="jobjects/fsearch.htm" alt="Search this book" /></map><div class="navbar"><p><TABLEWIDTH="684"BORDER="0"CELLSPACING="0"CELLPADDING="0"><TR><TDALIGN="LEFT"VALIGN="TOP"WIDTH="228"><ACLASS="sect1"HREF="ch19_10.htm"TITLE="19.9. Debugging the Raw HTTP Exchange"><IMGSRC="../gifs/txtpreva.gif"ALT="Previous: 19.9. Debugging the Raw HTTP Exchange"BORDER="0"></A></TD><TDALIGN="CENTER"VALIGN="TOP"WIDTH="228"><B><FONTFACE="ARIEL,HELVETICA,HELV,SANSERIF"SIZE="-1"><ACLASS="chapter"REL="up"HREF="ch19_01.htm"TITLE="19. CGI Programming"></A></FONT></B></TD><TDALIGN="RIGHT"VALIGN="TOP"WIDTH="228"><ACLASS="sect1"HREF="ch19_12.htm"TITLE="19.11. Creating Sticky Widgets"><IMGSRC="../gifs/txtnexta.gif"ALT="Next: 19.11. Creating Sticky Widgets"BORDER="0"></A></TD></TR></TABLE></DIV><DIVCLASS="sect1"><H2CLASS="sect1"><ACLASS="title"NAME="ch19-16221">19.10. Managing Cookies</A></H2><DIVCLASS="sect2"><H3CLASS="sect2"><ACLASS="title"NAME="ch19-pgfId-1122">Problem<ACLASS="indexterm"NAME="ch19-idx-1000005489-0"></A><ACLASS="indexterm"NAME="ch19-idx-1000005489-1"></A><ACLASS="indexterm"NAME="ch19-idx-1000005489-2"></A></A></H3><PCLASS="para">You want to get or set a cookie to help manage sessions or user preferences.</P></DIV><DIVCLASS="sect2"><H3CLASS="sect2"><ACLASS="title"NAME="ch19-pgfId-1128">Solution</A></H3><PCLASS="para">Using CGI.pm, retrieve an existing cookie like this:</P><PRECLASS="programlisting">$preference_value = cookie(&quot;preference name&quot;);</PRE><PCLASS="para">To prepare a cookie, do this:</P><PRECLASS="programlisting">$packed_cookie = cookie( -NAME    =&gt; &quot;preference name&quot;,                         -VALUE   =&gt; &quot;whatever you'd like&quot;,                         -EXPIRES =&gt; &quot;+2y&quot;);</PRE><PCLASS="para">To save a cookie back to the client browser, you must include it in the HTTP header, probably using either the <CODECLASS="literal">header</CODE> or <CODECLASS="literal">redirect</CODE> functions:</P><PRECLASS="programlisting">print header(-COOKIE =&gt; $packed_cookie);</PRE></DIV><DIVCLASS="sect2"><H3CLASS="sect2"><ACLASS="title"NAME="ch19-pgfId-1148">Discussion</A></H3><PCLASS="para">Cookies store information on the client's browser. If you're using Netscape under Unix, you can inspect your own <EMCLASS="emphasis">~/.netscape/cookies</EM> file, although this doesn't show your current set of cookies. It only holds those cookies present when you last exited the browser. Think of them as per-application user preferences or a way to help with transactions. Benefits of cookies are that they can be shared between several different programs on your server, and they persist even across browser invocations.</P><PCLASS="para">However, cookies can be used for dubious tricks like traffic analysis and click tracing. This makes some folks very nervous about who is collecting their personal data and what use will be made of their page viewing habits. Cookies don't travel well, either. If you use a browser at home or in someone else's office, it won't have the cookies from the browser in your office. For this reason, do not expect every browser to accept the cookies you give it. As if that wasn't bad enough, browsers can randomly toss cookies. Here's an excerpt from the HTTP State Management Mechanism draft at <ACLASS="systemitem.url"HREF="http://portal.research.bell-labs.com/~dmk/cookie-2.81-3.1.txt">http://portal.research.bell-labs.com/~dmk/cookie-2.81-3.1.txt</A>:</P><BLOCKQUOTECLASS="blockquote"><PCLASS="para">Because user agents have finite space in which to store cookies, they may also discard older cookies to make space for newer ones, using, for example, a least-recently-used algorithm, along with constraints on the maximum number of cookies that each origin server may set.</P></BLOCKQUOTE><PCLASS="para">Due to their unreliability, you should probably not place too much faith in cookies. Use them for simple, stateful transactions, and avoid traffic analysis for reasons of privacy.</P><PCLASS="para"><ACLASS="xref"HREF="ch19_11.htm#ch19-27781"TITLE="ic_cookies">Example 19.7</A> is a complete program that remembers the user's last choice.</P><DIVCLASS="example"><H4CLASS="example"><ACLASS="title"NAME="ch19-27781">Example 19.7: ic_cookies</A></H4><PRECLASS="programlisting">#!/usr/bin/perl -w# <ACLASS="indexterm"NAME="ch19-idx-1000005490-0"></A>ic_cookies - sample CGI script that uses a cookieuse CGI qw(:standard);use strict;my $cookname = &quot;favorite ice cream&quot;;my $favorite = param(&quot;flavor&quot;);my $tasty    = cookie($cookname) || 'mint';unless ($favorite) {    print header(), start_html(&quot;Ice Cookies&quot;), h1(&quot;Hello Ice Cream&quot;),          hr(), start_form(),            p(&quot;Please select a flavor: &quot;, textfield(&quot;flavor&quot;,$tasty)),              end_form(), hr();    exit;}my $cookie = cookie(                -NAME    =&gt; $cookname,                -VALUE   =&gt; $favorite,                -EXPIRES =&gt; &quot;+2y&quot;,            );print header(-COOKIE =&gt; $cookie),      start_html(&quot;Ice Cookies, #2&quot;),      h1(&quot;Hello Ice Cream&quot;),      p(&quot;You chose as your favorite flavor `$favorite'.&quot;);<ACLASS="indexterm"NAME="ch19-idx-1000005492-0"></A><ACLASS="indexterm"NAME="ch19-idx-1000005492-1"></A><ACLASS="indexterm"NAME="ch19-idx-1000005492-2"></A></PRE></DIV></DIV><DIVCLASS="sect2"><H3CLASS="sect2"><ACLASS="title"NAME="ch19-pgfId-1220">See Also</A></H3><PCLASS="para">The documentation for the standard CGI module</P></DIV></DIV><DIVCLASS="htmlnav"><P></P><HRALIGN="LEFT"WIDTH="684"TITLE="footer"><TABLEWIDTH="684"BORDER="0"CELLSPACING="0"CELLPADDING="0"><TR><TDALIGN="LEFT"VALIGN="TOP"WIDTH="228"><ACLASS="sect1"HREF="ch19_10.htm"TITLE="19.9. Debugging the Raw HTTP Exchange"><IMGSRC="../gifs/txtpreva.gif"ALT="Previous: 19.9. Debugging the Raw HTTP Exchange"BORDER="0"></A></TD><TDALIGN="CENTER"VALIGN="TOP"WIDTH="228"><ACLASS="book"HREF="index.htm"TITLE="Perl Cookbook"><IMGSRC="../gifs/txthome.gif"ALT="Perl Cookbook"BORDER="0"></A></TD><TDALIGN="RIGHT"VALIGN="TOP"WIDTH="228"><ACLASS="sect1"HREF="ch19_12.htm"TITLE="19.11. Creating Sticky Widgets"><IMGSRC="../gifs/txtnexta.gif"ALT="Next: 19.11. Creating Sticky Widgets"BORDER="0"></A></TD></TR><TR><TDALIGN="LEFT"VALIGN="TOP"WIDTH="228">19.9. Debugging the Raw HTTP Exchange</TD><TDALIGN="CENTER"VALIGN="TOP"WIDTH="228"><ACLASS="index"HREF="index/index.htm"TITLE="Book Index"><IMGSRC="../gifs/index.gif"ALT="Book Index"BORDER="0"></A></TD><TDALIGN="RIGHT"VALIGN="TOP"WIDTH="228">19.11. Creating Sticky Widgets</TD></TR></TABLE><HRALIGN="LEFT"WIDTH="684"TITLE="footer"><FONTSIZE="-1"></DIV<!-- LIBRARY NAV BAR --> <img src="../gifs/smnavbar.gif" usemap="#library-map" border="0" alt="Library Navigation Links"><p> <a href="copyrght.htm">Copyright &copy; 2002</a> O'Reilly &amp; Associates. All rights reserved.</font> </p> <map name="library-map"> <area shape="rect" coords="1,0,85,94" href="../index.htm"><area shape="rect" coords="86,1,178,103" href="../lwp/index.htm"><area shape="rect" coords="180,0,265,103" href="../lperl/index.htm"><area shape="rect" coords="267,0,353,105" href="../perlnut/index.htm"><area shape="rect" coords="354,1,446,115" href="../prog/index.htm"><area shape="rect" coords="448,0,526,132" href="../tk/index.htm"><area shape="rect" coords="528,1,615,119" href="../cookbook/index.htm"><area shape="rect" coords="617,0,690,135" href="../pxml/index.htm"></map> </BODY></HTML>

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -