Уведомления

Группа в Telegram: @pythonsu

#1 Дек. 25, 2015 09:46:33

sergey_belora
Зарегистрирован: 2015-12-25
Сообщения: 5
Репутация: +  0  -
Профиль   Отправить e-mail  

установка cookie пользователю

Добрый день. Подскажите как установить пользователю куки. Пробую так(ниже) не получается.

страница ввода данных для авторизации:

<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 не высвечивается сообщение, что вы не авторизованы.

Подскажите как устанавливать куки. И как ограничить доступ по ним к этой странице, чтобы не прошедшим авторизацию выводилось что вы не авторизованы

Офлайн

#2 Дек. 25, 2015 09:57:44

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

установка cookie пользователю

cgi не актуален уже лет 15, к чему этот мазохизм?



Офлайн

#3 Дек. 25, 2015 10:22:09

sergey_belora
Зарегистрирован: 2015-12-25
Сообщения: 5
Репутация: +  0  -
Профиль   Отправить e-mail  

установка cookie пользователю

FishHook
cgi не актуален уже лет 15, к чему этот мазохизм?
ожидал подобные вопросы. просто для себя делаю. не хочется заморачиваться с flask, django и т.д., да и денег за vps берут больше.

Офлайн

#4 Дек. 25, 2015 10:30:38

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

установка cookie пользователю

sergey_belora
да и денег за vps берут больше
За vps денег берут больше чем за что? Вы свой cgi как хостить собираетесь?



Офлайн

#5 Дек. 25, 2015 10:32:48

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

установка cookie пользователю

sergey_belora
не хочется заморачиваться с flask, django
А вы сейчас что делаете, не заморачиваетесь ли? Вы, наверное, легко и просто пишите простейший код, не задумываясь об элементарной рутине, даже?



Отредактировано FishHook (Дек. 25, 2015 10:34:32)

Офлайн

#6 Дек. 25, 2015 12:17:16

4kpt_III
Зарегистрирован: 2014-12-22
Сообщения: 999
Репутация: +  39  -
Профиль   Отправить e-mail  

установка cookie пользователю

sergey_belora
Поддержу FishHook. Это какое-то извращенное техно-садо-мазо. Возьмите bottle. Дам доки вообще не то, что кот наплакал. Там котенок нарыдал

Офлайн

#7 Дек. 25, 2015 18:46:48

sander
Зарегистрирован: 2015-02-19
Сообщения: 317
Репутация: +  53  -
Профиль   Отправить e-mail  

установка cookie пользователю

sergey_belora
могу ошибаться, но кажется куки выводятся до тела страницы и перед content заголовком

Офлайн

#8 Дек. 25, 2015 19:05:08

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

установка cookie пользователю

sander
sergey_beloraмогу ошибаться, но кажется куки выводятся до тела страницы и перед content заголовком
Куки - это просто один из хидеров, в стандарте HTTP 1.1 никаких куки впомине нет.



Отредактировано FishHook (Дек. 25, 2015 19:28:18)

Офлайн

#9 Дек. 25, 2015 19:22:21

sander
Зарегистрирован: 2015-02-19
Сообщения: 317
Репутация: +  53  -
Профиль   Отправить e-mail  

установка cookie пользователю

FishHook
спасибо капитан, заходите почаще

Офлайн

#10 Дек. 25, 2015 19:32:10

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

установка cookie пользователю

sander
Ну если вы предпочитаете устоявшимся терминам расплывчатые целеуказания типа “до тела, но перед content заголовком не доходя два байта до версии протокола” то ОК, не мешаю, несите свет в массы.



Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version