Найти - Пользователи
Полная версия: установка cookie пользователю
Начало » Web » установка cookie пользователю
1 2
sergey_belora
Добрый день. Подскажите как установить пользователю куки. Пробую так(ниже) не получается.

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

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

Подскажите как устанавливать куки. И как ограничить доступ по ним к этой странице, чтобы не прошедшим авторизацию выводилось что вы не авторизованы
FishHook
cgi не актуален уже лет 15, к чему этот мазохизм?
sergey_belora
FishHook
cgi не актуален уже лет 15, к чему этот мазохизм?
ожидал подобные вопросы. просто для себя делаю. не хочется заморачиваться с flask, django и т.д., да и денег за vps берут больше.
FishHook
sergey_belora
да и денег за vps берут больше
За vps денег берут больше чем за что? Вы свой cgi как хостить собираетесь?
FishHook
sergey_belora
не хочется заморачиваться с flask, django
А вы сейчас что делаете, не заморачиваетесь ли? Вы, наверное, легко и просто пишите простейший код, не задумываясь об элементарной рутине, даже?
4kpt_III
sergey_belora
Поддержу FishHook. Это какое-то извращенное техно-садо-мазо. Возьмите bottle. Дам доки вообще не то, что кот наплакал. Там котенок нарыдал
sander
sergey_belora
могу ошибаться, но кажется куки выводятся до тела страницы и перед content заголовком
FishHook
sander
sergey_beloraмогу ошибаться, но кажется куки выводятся до тела страницы и перед content заголовком
Куки - это просто один из хидеров, в стандарте HTTP 1.1 никаких куки впомине нет.
sander
FishHook
спасибо капитан, заходите почаще
FishHook
sander
Ну если вы предпочитаете устоявшимся терминам расплывчатые целеуказания типа “до тела, но перед content заголовком не доходя два байта до версии протокола” то ОК, не мешаю, несите свет в массы.
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB