Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
C
cpython
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
Analytics
Analytics
Repository
Value Stream
Wiki
Wiki
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Commits
Issue Boards
Open sidebar
Kirill Smelkov
cpython
Commits
1b07f2bc
Commit
1b07f2bc
authored
Aug 19, 2000
by
Moshe Zadka
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Initial revision. Markup unchecked.
parent
52ea8727
Changes
1
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
232 additions
and
0 deletions
+232
-0
Doc/lib/libcookie.tex
Doc/lib/libcookie.tex
+232
-0
No files found.
Doc/lib/libcookie.tex
0 → 100644
View file @
1b07f2bc
\section
{
\module
{
Cookie
}
---
RFC2109 HTTP State Management (AKA Cookies) Support
}
\declaremodule
{
standard
}{
Cookie
}
\moduleauthor
{
Timothy O'Malley
}{
timo@alum.mit.edu
}
\sectionauthor
{
Moshe Zadka
}{
moshez@zadka.site.co.il
}
\modulesynopsis
{
Support HTTP State Management (Cookies)
}
The
\module
{
Cookie
}
module defines classes for abstracting the concept of
Cookies, an HTTP state management mechanism. It supports both simplistic
string-only cookies, and provides an abstraction for having any serializable
data-type as cookie value.
\subsection
{
Example
\label
{
cookie-example
}}
The following example demonstrates how to open a can of spam using the
\module
{
spam
}
module.
\begin{verbatim}
>>> import Cookie
>>> C = Cookie.SimpleCookie()
>>> C = Cookie.SerialCookie()
>>> C = Cookie.SmartCookie()
>>> C = Cookie.Cookie() # backwards compatible alias for SmartCookie
>>> C = Cookie.SmartCookie()
>>> C["fig"] = "newton"
>>> C["sugar"] = "wafer"
>>> C # generate HTTP headers
Set-Cookie: sugar=wafer;
Set-Cookie: fig=newton;
>>> C = Cookie.SmartCookie()
>>> C["rocky"] = "road"
>>> C["rocky"]["path"] = "/cookie"
>>> print C.output(header="Cookie:")
Cookie: rocky=road; Path=/cookie;
>>> print C.output(attrs=[], header="Cookie:")
Cookie: rocky=road;
>>> C = Cookie.SmartCookie()
>>> C.load("chips=ahoy; vienna=finger") # load from a string (HTTP header)
>>> C
Set-Cookie: vienna=finger;
Set-Cookie: chips=ahoy;
>>> C = Cookie.SmartCookie()
>>> C.load('keebler="E=everybody; L=
\\
"Loves
\\
"; fudge=
\\
012;";')
>>> C
Set-Cookie: keebler="E=everybody; L=
\"
Loves
\"
; fudge=
\0
12;";
>>> C = Cookie.SmartCookie()
>>> C["oreo"] = "doublestuff"
>>> C["oreo"]["path"] = "/"
>>> C
Set-Cookie: oreo="doublestuff"; Path=/;
>>> C = Cookie.SmartCookie()
>>> C["twix"] = "none for you"
>>> C["twix"].value
'none for you'
>>> C = Cookie.SimpleCookie()
>>> C["number"] = 7 # equivalent to C["number"] = str(7)
>>> C["string"] = "seven"
>>> C["number"].value
'7'
>>> C["string"].value
'seven'
>>> C
Set-Cookie: number=7;
Set-Cookie: string=seven;
>>> C = Cookie.SerialCookie()
>>> C["number"] = 7
>>> C["string"] = "seven"
>>> C["number"].value
7
>>> C["string"].value
'seven'
>>> C
Set-Cookie: number="I7
\0
12.";
Set-Cookie: string="S'seven'
\0
12p1
\0
12.";
>>> C = Cookie.SmartCookie()
>>> C["number"] = 7
>>> C["string"] = "seven"
>>> C["number"].value
7
>>> C["string"].value
'seven'
>>> C
Set-Cookie: number="I7
\0
12.";
Set-Cookie: string=seven;
\end{verbatim}
\begin{excdesc}
{
CookieError
}
Exception failing because of RFC2109 invalidity: incorrect attributes,
incorrect
\code
{
Set-Cookie
}
header, etc.
\end{excdesc}
%\subsection{Morsel Objects}
%\label{morsel-objects}
\begin{classdesc}
{
Morsel
}{}
Abstract a key/value pair, which has some RFC2109 attributes.
Morsels are dictionary-like objects, whose set of keys is constant ---
the valid RFC2109 attributes, which are
\begin{itemize}
\item
\code
{
expires
}
\item
\code
{
path
}
\item
\code
{
comment
}
\item
\code
{
domain
}
\item
\code
{
max-age
}
\item
\code
{
secure
}
\item
\code
{
version
}
\end{itemize}
\end{itemize}
The keys are case-insensitive.
\end{classdesc}
\begin{memberdesc}
[Morsel]
{
value
}
The value of the cookie.
\end{methoddesc}
\begin{memberdesc}
[Morsel]
{
coded
_
value
}
The encoded value of the cookie --- this is what should be sent.
\end{methoddesc}
\begin{memberdesc}
[Morsel]
{
key
}
The name of the cookie.
\end{methoddesc}
\begin{methodesc}
[Morsel]
{
set
}{
key, value, coded
_
value
}
Set the
\var
{
key
}
,
\var
{
value
}
and
\var
{
coded
_
value
}
members.
\end{methoddesc}
\begin{methoddesc}
[Morsel]
{
isReservedKey
}{
K
}
Whether
\var
{
K
}
is a member of the set of keys of a
\class
{
Morsel
}
.
\end{methoddesc}
\begin{methoddesc}
[Morsel]
{
output
}{
\opt
{
attrs,
\opt
{
header
}}
Return a string representation of the Morsel, suitable
to be sent as an HTTP header. By default, all the attributes are included,
unless
\var
{
attrs
}
is given, in which case it should be a list of attributes
to use.
\var
{
header
}
is by default
\code
{
"Set-Cookie:"
}
.
\end{methoddesc}
\begin{methoddesc}
[Morsel]
{
js
_
output
}{
\opt
{
attrs
}}
Return an embeddable JavaScript snippet, which, if run on a browser which
supports JavaScript, will act the same as if the HTTP header was sent.
The meaning for
\var
{
attrs
}
is the same as in
\method
{
output()
}
.
\end{methoddesc}
.
\begin{methoddesc}
[Morsel]
{
OutputString
}{
\opt
{
attrs
}}
Return a string representing the Morsel, without any surrounding HTTP
or JavaScript.
The meaning for
\var
{
attrs
}
is the same as in
\method
{
output()
}
.
\end{methoddesc}
# This used to be strict parsing based on the RFC2109 and RFC2068
# specifications. I have since discovered that MSIE 3.0x doesn't
# follow the character rules outlined in those specs. As a
# result, the parsing rules here are less strict.
\begin{classdesc}
{
BaseCookie
}{
\opt
{
input
}}
This class is a dictionary-like object whose keys are strings and
whose values are
\class
{
Morsel
}
s. Note that upon setting a key to
a value, the value is first converted to a
\class
{
Morsel
}
containing
the key and the value.
If
\var
{
input
}
is given, it is passed to the
\method
{
load
}
method.
\end{classdesc}
\begin{methoddesc}
[BaseCookie]
{
value
_
decode
}{
val
}
Return a decoded value from a string representation. Return value can
be any type. This method does nothing in
\class
{
BaseCookie
}
--- it exists
so it can be overridden.
\end{methoddesc}
\begin{methoddesc}
[BaseCookie]
{
value
_
encode
}{
val
}
Return an encoded value.
\var
{
val
}
can be any type, but return value
must be a string. This method does nothing in
\class
{
BaseCookie
}
--- it exists
so it can be overridden
In general, it should be the case that
\method
{
value
_
encode
}
and
\method
{
value
_
decode
}
are inverses on the range of
\var
{
value
_
decode
}
.
\end{methoddesc}
.
\begin{methoddesc}
[BaseCookie]
{
output
}{
\opt
{
attrs
\opt
{
, header
\opt
{
, sep
}}}}
Return a string representation suitable to be sent as HTTP headers.
\var
{
attrs
}
and
\var
{
header
}
are sent to each
\class
{
Morsel
}
's
\method
{
output
}
method.
\var
{
sep
}
is used to join the headers together, and is by default
a newline.
\end{methoddesc}
\begin{methoddesc}
[BaseCookie]
{
js
_
output
}{
\opt
{
attrs
}}
Return an embeddable JavaScript snippet, which, if run on a browser which
supports JavaScript, will act the same as if the HTTP headers was sent.
The meaning for
\var
{
attrs
}
is the same as in
\method
{
output()
}
.
\end{methoddesc}
\begin{methoddesc}
[BaseCookie]
{
load
}{
rawdata
}
If
\var
{
rawdata
}
is a string, parse it as an
\code
{
HTTP
_
COOKIE
}
and add
the values found there as
\class
{
Morsel
}
s. If it is a dictionary, it
is equivalent to calling
\begin{verbatim}
map(BaseCookie.
__
setitem
__
, rawdata.keys(), rawdata.values())
\end{varbatim}
\end{methoddesc}
\begin{classdesc}
{
SimpleCookie
}{
\opt
{
input
}}
This class derives from
\class
{
BaseCookie
}
and overrides
\method
{
value
_
decode
}
and
\method
{
value
_
encode
}
to be the identity and
\function
{
str()
}
respectively.
\end{classdesc}
\begin{classdesc}
{
SerialCookie
}{
\opt
{
input
}}
This class derives from
\class
{
BaseCookie
}
and overrides
\method
{
value
_
decode
}
and
\method
{
value
_
encode
}
to be the
\function
{
pickle.loads()
}
and
\function
{
pickle.dumps
}
. Note that using this class is a security hole,
as arbitrary client-code can be run on
\function
{
pickle.loads()
}
.
\end{classdesc}
\begin{classdesc}
{
SmartCookie
}{
\opt
{
input
}}
This class derives from
\class
{
BaseCookie
}
. It overrides
\method
{
value
_
decode
}
to be
\function
{
pickle.loads()
}
if it is a valid pickle, and otherwise
the value itself. It overrides
\method
{
value
_
encode
}
to be
\function
{
pickle.dumps()
}
unless it is a string, in which case it returns
the value itself.
The same security warning from
\class
{
SerialCookie
}
applies here.
\end{classdesc}
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment