Python - 为什么不机械化会话互相识别?

时间:2016-01-25 09:41:48

标签: python session session-cookies mechanize

我正在运行 python 脚本,使用 mechanize 包登录网页。我从一个脚本登录,同时保持会话 e(通过添加sleep),我从不同的脚本访问同一个网页。但是,即使第一个会话还活着,它也要求我输入用户名和密码。

为什么不承认既定会议?我该如何解决这个问题?

以下是我用于建立会话的代码:

import mechanize
import cookielib
from time import sleep

loginURL = '<loginURL>'
URL = '<URL>'

browser = mechanize.Browser()

# Cookie Jar
cj = cookielib.LWPCookieJar()
browser.set_cookiejar(cj)

#Browser Options
browser.set_handle_robots(False)
browser.set_handle_equiv(True)
browser.set_handle_gzip(True)
browser.set_handle_redirect(True)
browser.set_handle_referer(True)

browser.addheaders = [('User-agent', 'Mozilla/5.0 (X11; U; Linux x86_64; en-US; rv:43.0) Gecko/20100101 Debian 3.2.73-2+deb7u1 Firefox/43.0')]
browser.open(loginURL)
browser.select_form(nr = 0)
browser.form['username'] = '<username>'
browser.form['password'] = '<password>'
login = browser.submit()
#print login.read()

print 'keeping session...'
sleep(240)
#Checking that the session still alive
open = browser.open(URL)
print open.read()

然后我在这里运行第二个脚本

import mechanize
import cookielib    

URL = '<URL>'

browser = mechanize.Browser()

# Cookie Jar
cj = cookielib.LWPCookieJar()
browser.set_cookiejar(cj)

#Browser Options
browser.set_handle_robots(False)
browser.set_handle_equiv(True)
browser.set_handle_gzip(True)
browser.set_handle_redirect(True)
browser.set_handle_referer(True)
browser.addheaders = [('User-agent', 'Mozilla/5.0 (X11; U; Linux x86_64; en-US; rv:43.0) Gecko/20100101 Debian 3.2.73-2+deb7u1 Firefox/43.0')]
#Checking the output
open = browser.open(URL)
print open.read()

1 个答案:

答案 0 :(得分:1)

主要是服务器通过会话ID识别登录用户作为cookie发送。第一个脚本从服务器获取该cookie(当您登录时)但第二个脚本没有该cookie。第一个脚本可以将cookie保存到文件,第二个脚本可以从文件中读取cookie。

编辑:更准确地说:两个脚本都可以获得会话ID但不同。并且服务器将第一个脚本的会话ID识别为已登录。

相关问题