Versión: 2.x.
Descargas: cgisession.zip.
El siguiente módulo permite autenticar usuarios en una web desarrollada vía CGI utilizando las cabeceras HTML correspondientes. Utiliza los módulos estándar Cookie, datetime, os y hashlib (para cifrar la contraseña).
Puede ser utilizado como base para satisfacer vuestras necesidades a la hora de implementar un sistema de este tipo. Al momento de hacer uso del mismo, recomiendo comparar los valores de la cookie con aquellos almacenados en una base de datos en la función is_authenticated.
#!/usr/bin/env python
# -*- coding: utf-8 -*-
#
# session.py
#
# Copyright 2014 Recursos Python - www.recursospython.com
#
from Cookie import SimpleCookie
from datetime import datetime, timedelta
from hashlib import md5
from os import environ
def _build_cookie(name, domain, username, password, expiration_days):
"""
Build a SimpleCookie object and returns the HTTP
Set-Cookie header.
"""
cookie = SimpleCookie()
# Username and Password (encrypt this one first).
cookie[name] = username + "|" + md5(password).hexdigest()
# Expiration.
expires = datetime.now() + timedelta(days=expiration_days)
# Morsel objects
cookie[name]["domain"] = domain
cookie[name]["path"] = "/"
cookie[name]["expires"] = expires.strftime("%a, %d-%b-%Y "
"%H:%M:%S PST")
# Return HTTP header (Set-Cookie).
return cookie
def content_type_html():
"""Prints the Content-Type header for HTML code"""
print "Content-Type: text/html"
print
def get_auth_cookies(name):
"""
Return a 2-tuple (username, password) if there are
available cookies. False otherwise.
"""
# Check if there's any cookie available.
if "HTTP_COOKIE" in environ:
cookie = SimpleCookie(environ["HTTP_COOKIE"])
# Look for our cookie
if name in cookie:
# Maybe it's empty
if cookie[name].value:
return tuple(cookie[name].value.split("|"))
return False
def is_authenticated(name):
"""
Return True if the HTTP cookies are set. False otherwise.
"""
try:
# Retrieve cookies data
cookie_username, cookie_password = get_auth_cookies(name)
except TypeError:
# No cookies available
return False
else:
# Security issue: should validate the cookie values.
return True
def remove_auth_cookie(name, domain):
"""
Remove a HTTP auth cookie.
"""
# -1 removes the cookie
print _build_cookie(name, domain, "", "", -1)
def set_auth_cookie(name, domain, username, password):
"""
Set a HTTP auth cookie.
"""
# Will expire in 7 days
print _build_cookie(name, domain, username, password, 7)
La descarga incluye un simple ejemplo que hace uso del módulo (archivos main.py, login.py y logout.py) y un servidor HTTP para interpretar los scripts.
Aplicando los recaudos de seguridad nombrados anteriormente, actualmente utilizo este módulo en producción de una aplicación web CGI, por lo que es totalmente funcional y eficaz.
Curso online 👨💻
¡Ya lanzamos el curso oficial de Recursos Python en Udemy!
Un curso moderno para aprender Python desde cero con programación orientada a objetos, SQL y tkinter en 2024.
Consultoría 💡
Ofrecemos servicios profesionales de desarrollo y capacitación en Python a personas y empresas. Consultanos por tu proyecto.