страница ввода данных для авторизации:
<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>
скрипт проверки введенных данных при логине login.cgi:
#!/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>"
Страница которая по идее не должна быть видна не прошедшим авторизацию account.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>"
В firebug проверяю, куки не выставляются, и при вызове страницы account.html не высвечивается сообщение, что вы не авторизованы.
Подскажите как устанавливать куки. И как ограничить доступ по ним к этой странице, чтобы не прошедшим авторизацию выводилось что вы не авторизованы