Reputation: 597113
I tried several version of this:
def process_response(self, request, response):
if not request.COOKIES.get('new_user', None):
print "cookie"
max_age = 365 * 24 * 60 * 60 # 10 years
expires = datetime.datetime.utcnow() + datetime.timedelta(seconds=max_age)
response.set_cookie('new_user', expires=expires)
return response
But it doesn't work: I get "cookie" printed at every page request, and no cookie is appearing in my FF dev toolbar cookie lister. I didn't set any of my browser to reject cookies.
I'm currently using the developpement server and I do have the common and session middlewares set as the first ones in settings. I don't have any cookie settings set.
Upvotes: 5
Views: 8523
Reputation: 13549
From Django docs:
expires should either be a string in the format "Wdy, DD-Mon-YY HH:MM:SS GMT" or a datetime.datetime object in UTC. If expires is a datetime object, the max_age will be calculated.
So, try it:
import datetime
max_age = 365 * 24 * 60 * 60 # 10 years
expires = datetime.datetime.now() + datetime.timedelta(seconds=max_age)
# Cookie to GMT format via strftime method
response.set_cookie('new_user', expires=expires.strftime("%a, %d-%b-%Y %H:%M:%S GMT"))
or
response.set_cookie('new_user', expires=expires.utctimetuple())
I prefer the first method.
Upvotes: 0
Reputation: 895
After hours searching, I discovered that you have to set the max_age
parameter:
response.set_cookie('ref', request.GET.get('ref', ''),
expires=expires.utctimetuple(), max_age=max_age)
Upvotes: 5