python: взаимодействовать с сессией в скриптах cgi - PullRequest
4 голосов
/ 12 октября 2009

Могут ли скрипты Python CGI записывать и читать данные в сеансе? Если так, то как? Существует ли высокоуровневый API или я должен катить свои собственные классы?

Ответы [ 2 ]

7 голосов
/ 12 октября 2009

Нет сессии на cgi. Вы должны свернуть свой собственный код обработки сеанса, если вы используете raw cgi.

По сути, сеансы работают путем создания уникального номера файла cookie и отправки его в заголовке ответа клиенту, а затем проверки этого файла cookie при каждом подключении. Сохраните данные сеанса где-нибудь на сервере (память, база данных, диск) и используйте номер файла cookie в качестве ключа для получения их при каждом запросе, сделанном клиентом.

Однако cgi - это не то, как вы разрабатываете приложения для Интернета на python. Используйте wsgi. Используйте веб-фреймворк.

Вот краткий пример использования cherrypy . cherrypy.tools.sessions - инструмент с расширенными возможностями, который автоматически устанавливает / извлекает файлы cookie и связывается с данными:

import cherrypy

class HelloSessionWorld(object):
    @cherrypy.tools.sessions()
    def index(self):
        if 'data' in cherrypy.session:
            return "You have a cookie! It says: %r" % cherrypy.session['data']
        else:
            return "You don't have a cookie. <a href='getcookie'>Get one</a>."
    index.exposed = True

    @cherrypy.tools.sessions()
    def getcookie(self):
        cherrypy.session['data'] = 'Hello World'
        return "Done. Please <a href='..'>return</a> to see it"
    getcookie.exposed = True

application = cherrypy.tree.mount(HelloSessionWorld(), '/')

if __name__ == '__main__':
    cherrypy.quickstart(application)

Обратите внимание, что этот код является приложением wsgi, в том смысле, что вы можете опубликовать его на любом веб-сервере с поддержкой wsgi (apache имеет mod_wsgi). Кроме того, cherrypy имеет свой собственный сервер wsgi, так что вы можете просто запустить код с python, и он начнет работать на http://localhost:8080/

1 голос
/ 29 апреля 2017

Мой «недорогой» план веб-хостинга не разрешает использовать wsgi . Модуль Apache 'mod_wsgi' не может быть использован, потому что это общий сервер Apache. Я занимаюсь разработкой своего собственного класса.

Чтобы не начинать с нуля, я экспериментирую с реализацией класса сеанса, доступного на этом сайте: http://cgi.tutorial.codepoint.net/a-session-class

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...