Cookie Confusion - How to Set a Cookie

C

cbhoem

Hi -

I am trying my hand at python cookies. I'm confused about a few
things though. Do the python cookies get written to a cookies text
file? I have simple code below -- I see the cookie in my HTTP header
but do not get anything in the cookie text file. I'm working on
linux.

print "Content-type: text/html"
cookie = Cookie.SimpleCookie()
cookie['Test'] = 'abc'
print cookie
print

Are there rules about where in the header the set cookie line should
be?

Thanks in advance!
Christian
 
A

Aaron Watters

....I see the cookie in my HTTP header
but do not get anything in the cookie text file. I'm working on
linux.

print "Content-type: text/html"
cookie = Cookie.SimpleCookie()
cookie['Test'] = 'abc'
print cookie
print

Are there rules about where in the header the set cookie line should
be?

Hi Christian. I think the cookie can go anywhere in
the header, but I usually put it before the content-type.
If you want to store the cookie to a file,
or even better, to a database of some sort, you have to
do it yourself, the Cookie module doesn't do it for you,
I hope.

# store cookie to /tmp/cookie.txt
file("/tmp/cookie.txt","w").write(str(cookie))

For parsing cookies, I stole and modified this from
the Django source (for use in a cgi script):

===
from Cookie import SimpleCookie
import os

# stolen and modified from Django
def parse_cookie(cookie=None, environ=None):
if cookie is None:
if environ is None:
environ = os.environ
cookie = environ.get('HTTP_COOKIE', '')
if cookie == '':
return {}
c = SimpleCookie()
c.load(cookie)
cookiedict = {}
for key in c.keys():
cookiedict[key] = c.get(key).value
return cookiedict

===
All the best. -- Aaron Watters

===
http://www.xfeedme.com/nucular/pydistro.py/go?FREETEXT=monster
 
C

cbhoem

....I see the cookie in my HTTP header
but do not get anything in the cookie text file. I'm working on
linux.
print "Content-type: text/html"
cookie = Cookie.SimpleCookie()
cookie['Test'] = 'abc'
print cookie
print
Are there rules about where in the header the set cookie line should
be?

Hi Christian. I think the cookie can go anywhere in
the header, but I usually put it before the content-type.
If you want to store the cookie to a file,
or even better, to a database of some sort, you have to
do it yourself, the Cookie module doesn't do it for you,
I hope.

# store cookie to /tmp/cookie.txt
file("/tmp/cookie.txt","w").write(str(cookie))

For parsing cookies, I stole and modified this from
the Django source (for use in a cgi script):

===
from Cookie import SimpleCookie
import os

# stolen and modified from Django
def parse_cookie(cookie=None, environ=None):
if cookie is None:
if environ is None:
environ = os.environ
cookie = environ.get('HTTP_COOKIE', '')
if cookie == '':
return {}
c = SimpleCookie()
c.load(cookie)
cookiedict = {}
for key in c.keys():
cookiedict[key] = c.get(key).value
return cookiedict

===
All the best. -- Aaron Watters

===http://www.xfeedme.com/nucular/pydistro.py/go?FREETEXT=monster


Thanks for the code, Aaron. I will give it a try.

I've been reading some more about cookielib and am not sure whether I
should use Cookie or cookielib. This is what I want to do: a user is
going to login. Upon a successful login, I want to write their name
and date/time of visit to a cookie file. Which is the correct python
module to use?
 
A

Aaron Watters

Thanks for the code, Aaron. I will give it a try.

I've been reading some more about cookielib and am not sure whether I
should use Cookie or cookielib. This is what I want to do: a user is
going to login. Upon a successful login, I want to write their name
and date/time of visit to a cookie file. Which is the correct python
module to use?

Cookie does parsing and generation of cookie strings
for server-side applications like your CGI script.

The cookielib module
is designed for either implementing a client like a web browser
or emulating a client/browser (for web scraping, for example).

I think you want to use Cookie.
The distinction could be made clearer in
the docs, imho.

Also, when you say "write the cookie file" I think you mean
"store the cookie to the client browser". This should happen
automatically when you send the cookie header to the client
correctly (if the client is configured to cooperate).

-- Aaron Watters

===
http://www.xfeedme.com/nucular/pydistro.py/go?FREETEXT=default+does+nothing
 
C

cbhoem

Cookie does parsing and generation of cookie strings
for server-side applications like your CGI script.

The cookielib module
is designed for either implementing a client like a web browser
or emulating a client/browser (for web scraping, for example).

I think you want to use Cookie.
The distinction could be made clearer in
the docs, imho.

Also, when you say "write the cookie file" I think you mean
"store the cookie to the client browser". This should happen
automatically when you send the cookie header to the client
correctly (if the client is configured to cooperate).

-- Aaron Watters

===http://www.xfeedme.com/nucular/pydistro.py/go?FREETEXT=default+does+n...


Sorry for the slow replies. I've been in & out with a sick child.

I'm used to my javascript cookies. They are automatically written to
a cookie.txt file in a .mozilla dir under my user. When I say to
'write the cookie file' this is what I was referring to. I was
expecting my python cookie to automatically get written to the same
file. I have't seen this happen yet.
 
A

Aaron Watters

Sorry for the slow replies. I've been in & out with a sick child.

I'm used to my javascript cookies. They are automatically written to
a cookie.txt file in a .mozilla dir under my user. When I say to
'write the cookie file' this is what I was referring to. I was
expecting my python cookie to automatically get written to the same
file. I have't seen this happen yet.

Hmmm. I don't know how cookies are stored on the client.
I recommend using the standard cgi debug
environment dump after setting
a cookie to see if the cookie is coming back to the server.
If it is not something is wrong -- you are setting it incorrectly,
or the server or client is blocking the cookie.

Note if you are testing on one machine: some browsers
and servers have by default
special security restrictions on
"localhost" loopbacks -- it may be that this is causing
either the server or the client to ignore the cookie.

-- Aaron Watters
===
http://www.xfeedme.com/nucular/pydistro.py/go?FREETEXT=cooked
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

No members online now.

Forum statistics

Threads
473,768
Messages
2,569,574
Members
45,048
Latest member
verona

Latest Threads

Top