проверить, жив ли сессионный cookie (Python) - PullRequest
2 голосов
/ 11 сентября 2011

Пожалуйста, обратите внимание на следующий python фрагмент кода:

import cookielib, urllib, urllib2

def login(username, password):
    cookie_jar = cookielib.LWPCookieJar()
    opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cookie_jar))
    login = urllib.urlencode({'username': username, 'password': password})
    try:
        login_data = opener.open("http://www.example.com/login.php", login).read()
    except IOError:
        return 'Network Error'

    # on successful login the I'm storing the 'SESSION COOKIE'
    # that the site sends on a local file called cookie.txt

    cookie_jar.save('./cookie.txt', True, True)
    return login_data

# this method is called after quite sometime
# from calling the above method "login" 

def re_accessing_the _site():
    cookie_jar = cookielib.LWPCookieJar()

    # Here I'm re-loading the saved cookie
    # from the file to the cookie jar

    cookie_jar.revert('./cookie.txt', True, True)

    # there's only 1 cookie in the cookie jar
    for Cookie in cookie_jar:
        print 'Expires : ', Cookie.expires  ## prints None
        print 'Discard : ', Cookie.discard  ## prints True , means that the cookie is a
                                            ## session cookie
        print 'Is Expired : ', Cookie.is_expired()  ## prints False

    opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cookie_jar))
    try:
        data = opener.open("http://www.example.com/send.php")

        # Sometimes the opening fails as the cookie has expired
        # & sometimes it doesn't. Here I want a way to determine
        # whether the (session) cookie is still alive

    except IOError:
        return False
    return True

Сначала я вызываю метод login и сохраняет полученный cookie (который является сеансовым cookie ) в локальный файл с именем cookie.txt . Затем, через некоторое время ( 15-20 минут ), я вызываю другой метод re_accessing_the _site . На этот раз я также загружаю ранее сохраненный файл cookie в банку с файлом cookie. Иногда он работает нормально, но иногда он блокирует мне доступ (, поскольку срок действия файла cookie сеанса истек ). Так что все, что мне нужно, это способ проверить, все еще ли cookie во время разговора еще живы ...

...