Форум сайта python.su
Добрый день. Подскажите как установить пользователю куки. Пробую так(ниже) не получается.
страница ввода данных для авторизации:
<HTML> <HEAD> <meta charset="utf-8"> <TITLE>Вход</TITLE> </HEAD> <BODY> <center> Вход <form method=POST action="/cgi-bin/login.cgi"> <table><td> <tr><td>Логин:</td> <td><input type="text" name="login"></td></tr><br> <tr><td>Пароль:</td> <td><input type="password" name="password"></td></tr><br> </table> <input type="submit"> </form></center> </BODY> </HTML>
#!/usr/bin/python # --*-- coding: utf-8--*-- import MySQLdb import cgi import hashlib import re import datetime import Cookie #Узнаем какая дата сегодня date = datetime.date.today() form = cgi.FieldStorage() print "Content-Type: text/html; charset=utf-8" print "" print "<html><body>" cookies=Cookie.SimpleCookie() # присваиваем переменным имена с формы login = form.getfirst("login") password = form.getfirst("password") # фильтруем символы <, >, & и т.д. для безопасности login = cgi.escape(login) password = cgi.escape(str(password)) #хэш пароля. Будем сравнивать с тем, что есть в базе hash_password = hashlib.sha224(password).hexdigest() #Подключаемся к базе для выполнения запросов db = MySQLdb.connect(host='localhost', user='***', passwd='***', db='***', charset='utf8') #запросы для поиска пароля пользователя и логина find_login = """SELECT COUNT(login) FROM users WHERE login='{0}' """.format(login) find_pwd = """SELECT (password) FROM users WHERE login='{0}' """.format(login) is_activ = """SELECT (activ) FROM users WHERE login='{0}' """.format(login) # формируем курсор, с помощью которого можно исполнять SQL-запросы cursor = db.cursor() #Проверяем не введено ли что-то лишнее в поля логина и пароля. Если нет выполняем запрос if not re.match(r'^[a-zA-Z0-9]+$', login): print "логин может содержать только латинские буквы и цифры" else: cursor.execute(find_login) login_from_db = cursor.fetchone() if login_from_db[0] == 1: if not re.match(r'^[a-zA-Z0-9]+$', password): print 'пароль должен содержать только буквы латинского алфавита и цифры' else: cursor.execute(find_pwd) pwd_from_db = cursor.fetchone() if pwd_from_db[0] == hash_password: cursor.execute(is_activ) activ_from_db = cursor.fetchone() if activ_from_db[0] != 1: print 'Необходимо подтвердить email перед входом' else: print "Content-type: text/html\n" cookies['user']=form['login'].value cookies['user']['expires']='26-December-2015 12:00:00 GMT' cookies['user']['path']='/cgi-bin/' cookies['user']['domain']='.мойсайт.ru' cookies['user']['httponly']='httponly' print cookies print "<meta http-equiv=\"refresh\" content=\"10;URL=http://мойсайт.ru/account.html\" />" else: print 'не верный пароль' else: print 'введен не верный логин или пароль' print "</body></html>"
<html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> <script src="/cgi-bin/cookie.py"> </script> <title>Тest</title> </head> <body> </body> </html>
#!/usr/bin/python #--*--coding: utf-8--*-- import Cookie, os cookies=os.environ.get('HTTP_COOKIE') cookies=Cookie.SimpleCookie(cookies) usercookies=cookies.get('user') print('Content-type: text/html\n') print "<html><body>" if usercookies==None: print 'вы не авторизованы' else: print '<p>Welcome back, %s</p>' % usercookies.value print "</body></html>"
Офлайн
cgi не актуален уже лет 15, к чему этот мазохизм?
Офлайн
FishHookожидал подобные вопросы. просто для себя делаю. не хочется заморачиваться с flask, django и т.д., да и денег за vps берут больше.
cgi не актуален уже лет 15, к чему этот мазохизм?
Офлайн
sergey_beloraЗа vps денег берут больше чем за что? Вы свой cgi как хостить собираетесь?
да и денег за vps берут больше
Офлайн
sergey_beloraА вы сейчас что делаете, не заморачиваетесь ли? Вы, наверное, легко и просто пишите простейший код, не задумываясь об элементарной рутине, даже?
не хочется заморачиваться с flask, django
Отредактировано FishHook (Дек. 25, 2015 10:34:32)
Офлайн
sergey_belora
Поддержу FishHook. Это какое-то извращенное техно-садо-мазо. Возьмите bottle. Дам доки вообще не то, что кот наплакал. Там котенок нарыдал
Офлайн
sergey_belora
могу ошибаться, но кажется куки выводятся до тела страницы и перед content заголовком
Офлайн
sanderКуки - это просто один из хидеров, в стандарте HTTP 1.1 никаких куки впомине нет.
sergey_beloraмогу ошибаться, но кажется куки выводятся до тела страницы и перед content заголовком
Отредактировано FishHook (Дек. 25, 2015 19:28:18)
Офлайн
FishHook
спасибо капитан, заходите почаще
Офлайн
sander
Ну если вы предпочитаете устоявшимся терминам расплывчатые целеуказания типа “до тела, но перед content заголовком не доходя два байта до версии протокола” то ОК, не мешаю, несите свет в массы.
Офлайн