Уведомления

Группа в Telegram: @pythonsu

#1 Окт. 17, 2013 12:03:48

Xman2007
Зарегистрирован: 2013-10-16
Сообщения: 2
Репутация: +  0  -
Профиль   Отправить e-mail  

cgi os.environ cookie не выходит получить все переменные сессии от браузера(HTTP_COOKIE)

Есть cgi скрипт, который генерит html страничку с cookie. При входе браузером на сгенеренную страницу, браузер получает сгенеренный session и кучу дополнительных переменных в этой сессии.
Теперь когда браузер сохранил сессию, при последующем входе, этим же браузером, на ту же страницу, я хочу получить все переменные сессии тем же cgi-скриптом, через cookie от браузера, тут то и начинается проблема - я получаю только одну переменную cookie (Content), в данном примере это session.

Подскажите, пожалуйста куда “копать”?


Кусок кода прилагается:

from os import environ
from os.path import join
import Cookie
import datetime
import random
try:
  import cgi, cgitb
  cgitb.enable()
except ImportError:
  sys.stderr = sys.stdout
#cookie
def rendomcookie(length):
  return ''.join(random.choice("1234567890qwertyuiopasdfghjklzxcvbnmQWERTYUIOPLKJHGFDSAZXCVBNM") for i in range(length))
request_uri = environ['REQUEST_URI']
if environ.has_key('HTTP_COOKIE'):
    cookieget = environ.get("HTTP_COOKIE")
    cookie = Cookie.SimpleCookie(cookieget)
else:
    expiration = datetime.datetime.now() + datetime.timedelta(days=1)
    cookie = Cookie.SimpleCookie()
    cookie["session"] = rendomcookie(30)
#    cookie["session"]["domain"] = ".example.com"
    cookie["session"]["path"] = request_uri
    cookie["session"]["expires"] = expiration.strftime("%a, %d-%b-%Y %H:%M:%S PST")
print "Content-Type: text/html"
print cookie.output()
print
print "Cookie set with: " + cookie.output()
for i in environ:
    print i + '''=''' + environ[i]
    print "<br>"
print '''<HTML>
      <HEAD>
        <TITLE>test</TITLE>
      </HEAD>
      <BODY>
      </BODY>
  </HTML>'''

Вывод браузера при первом запросе:
##
Cookie set with: Set-Cookie: session=gf4bxMDyc7PtdkdIKiMHbBK09AoA1k; Domain=.example.com; expires=Fri, 18-Oct-2013 11:53:22 PST; Path=/python/

AUTH_TYPE=Basic
SERVER_SOFTWARE=Apache/2.2.25 (FreeBSD) PHP/5.4.16 mod_ssl/2.2.25 OpenSSL/0.9.8y DAV/2
SCRIPT_NAME=/python/index.cgi
SERVER_SIGNATURE=
REQUEST_METHOD=GET
…skip
##

Вывод браузера при последующих запросах (когда сессия браузером уже сохранилась):
##
Cookie set with: Set-Cookie: session=vXi6cTs9tr6XQgINYCkG8u1w3rH4bk
AUTH_TYPE=Basic
HTTP_COOKIE=session=vXi6cTs9tr6XQgINYCkG8u1w3rH4bk; session=vXi6cTs9tr6XQgINYCkG8u1w3rH4bk
SERVER_SOFTWARE=Apache/2.2.25 (FreeBSD) PHP/5.4.16 mod_ssl/2.2.25 OpenSSL/0.9.8y DAV/2
SCRIPT_NAME=/python/index2.cgi
SERVER_SIGNATURE=
REQUEST_METHOD=GET
…skip
##

Отредактировано Xman2007 (Окт. 17, 2013 13:04:15)

Офлайн

#2 Окт. 17, 2013 14:36:18

Xman2007
Зарегистрирован: 2013-10-16
Сообщения: 2
Репутация: +  0  -
Профиль   Отправить e-mail  

cgi os.environ cookie не выходит получить все переменные сессии от браузера(HTTP_COOKIE)

Разобрался. Браузер не передает сохраненные переменные одной cookie, такие как: Domain, Path, Created,…
…,передается Name и Content каждой куки которая была передана скриптом.
Например:

cookie = Cookie.SimpleCookie()
cookie["session"] = rendomcookie(30)
cookie["user"] = "test"
cookie["name"] = "Vasya"

Тогда в переменной HTTP_COOKIE переменного окружения мы получим:
HTTP_COOKIE=sessionZ9a0g47ANawqMSelFKtn9xVftzPsF; name=Vasya; user=test

Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version