程序被杀后请求会话结束吗?

时间:2015-11-09 06:08:40

标签: python session cookies python-requests

在启动python程序时,有没有在前一个会话中获取?

我已将会话设置为全局变量,以便可以通过任何需要它的方法访问它。但是,我猜测当我再次启动程序时会重置会话变量。

启动程序时有没有办法回到上一个会话?

session = requests.Session()

def auth():
    session = self.session
    url = 'this url has auth'
    session.post(url, data=data)
    # Now authentcated so lets grab the data
    call_data(sessions)

def call_data(session)
    url = 'this url has the data'
    session.post(url, data=data)

def check_data()
    url = 'this url does a specific call on data elements'
    self.session.post(url, data=data)

当我第二次加载程序时,我只想使用check_data方法,我不希望每次启动程序时都不需要auth,或者我只是好奇地看到如果可以的话;)

修改 我已用接受的答案更新了我的解决方案。

def auth():
    session = self.session
    session.cookies = LWPCookieJar("cookies.txt")

    url = 'this url has auth'
    session.post(url, data=data)
    # Now authentcated so lets grab the data
    call_data(sessions)

    session.cookies.save() #Save auth cookie

def some_other_method():
    if not cookie:
        session.cookies.load()

    # do stuff now that we're authed

代码显然没有为其他方法显示正确的访问者,但这个想法很好。 有兴趣知道这是否是保持authed的唯一方法。

2 个答案:

答案 0 :(得分:1)

通过cookie在http中跟踪会话。您可以通过存储在http.cookiejar.LWPCookieJar

中将它们保存在程序重启之间

在您的计划开始时,您必须将cookieJar设置为此FileCookieJar并加载现有的Cookie(如果有的话)

import requests
from http.cookiejar import LWPCookieJar
session = requests.Session()
session.cookies = LWPCookieJar("storage.jar")
session.cookies.load()

关闭程序之前,您必须将它们保存到文件

session.cookies.save()

请注意,默认情况下,它与浏览器具有相同的行为不保存会话Cookie,如果您想要一个不同的行为,那么这些Cookie会在重新启动时未设置为您的浏览器,只需要精确通过将ignore_discard参数设置为False来实现save()方法

session.cookies.save(ignore_discard=False)

答案 1 :(得分:0)

您不清楚尝试建立什么类型的会话。 Django的?烧瓶?有些不同? 还要注意,似乎拼写错误的call_data(sessions),其中只定义了session(没有s)。