8
votes

Python: Cookie persistant, générer un champ `expirant`

J'essaie de générer le texte d'un cookie persistant dans une simple application Web Python.

J'ai du mal à trouver un moyen de générer le champ expire . Le format de texte du champ est quelque peu compliqué et je préférerais ne pas écrire de code pour le générer moi-même.

Y a-t-il quelque chose dans Python qui aidera? J'ai cuisiné sur les docs pour cookie et Cookielib et ils semblent gérer une grande partie de l'entreprise de cookie, à l'exception de la génération du champ


1 commentaires

Vous pouvez simplement définir les champs «expirez» comme nombre d'entier de secondes dans le futur / passé. Float ne fonctionne pas. Voir http.cokies._getDate () / cookie._getdate () . Il semble tout simplement pas documenté.


4 Réponses :


13
votes

Je pense que vous voulez faire quelque chose comme ceci:

import Cookie, datetime, uuid
ck = Cookie.SimpleCookie()

ck['session'] = str(uuid.uuid4())
ck['session']['domain'] = 'foo.com'
ck['session']['path'] = '/'
expires = datetime.datetime.utcnow() + datetime.timedelta(days=30) # expires in 30 days
ck['session']['expires'] = expires.strftime("%a, %d %b %Y %H:%M:%S GMT")

>>> print ck.output()
Set-Cookie: session=9249169b-4c65-4daf-8e64-e46333aa5577; Domain=foo.com; expires=Mon, 01 Aug 2011 07:51:53 GMT; Path=/


2 commentaires

Ne pas régler expire à 0 Créer un cookie de session? Je cherche à créer un cookie persistant avec une valeur d'expiration non nulle.


Exemple mis à jour avec des cookies pour expirer dans 30 jours




4
votes

Si j'ai raison, lorsque vous utilisez cookie.simplecookie Vous pouvez simplement spécifier le TTL en secondes pour le champ expire quelque chose comme: xxx

La sortie de c.output () retourne quelque chose comme: xxx


0 commentaires

0
votes

Je développe un commentaire précédent et une demi-réponse à une réponse utilisable.

Celui-ci produit à ma connaissance un format de date de cookie le plus correct et pratique dans une seule fonction rapide - acceptée par n'importe quel vieux et SIMART, Navigateurs - Accepte l'heure absolue et relative: p> xxx pré>


la fonction évolué à partir de cookie._getdate () code> / http. cookies._getDate () code>, qui produit des espaces au lieu du procédé - code> 's (OK selon RFC, mais pas reconnu par tous les navigateurs). Cette fonction permet uniquement de synchronisation relative et est une fonction non documentée. Cependant, il peut être utilisé par la fonctionnalité non documentée également que vous pouvez donner des secondes entière (mais pas flotter!) Pour le champ Expires dans SimpleCookie Code> Morsels, qui sont ensuite interprétés par rapport à des secondes dans le futur / passé : P>

cookie_morsel['expires'] = +3600    # 1h into future; 3600.0 doesn't work!


0 commentaires