**会话管理**
1.Cookie技术
Cookie用于服务器实现会话,用户登录及相关功能时进行状态管理,Cookie的会话数据保存在浏览器端。
Cookie技术原理
- 服务器创建Cookie对象,保存会话数据,把Cookie数据发送给浏览器
- 浏览器获取cookie数据,保存在浏览器缓存区,然后在下次访问服务器时携带cookie数据
- 服务器获取浏览器发送的cookie数据
如何使用Cookie
# coding=utf-8
import urllib2
import cookielib
# 声明一个CookieJar对象实例来保存cookie
cookie = cookielib.CookieJar()
# 利用urllib2库的HTTPCookieProcessor对象来创建cookie处理器
handler = urllib2.HTTPCookieProcessor(cookie)
# 通过handler来构建opener
opener = urllib2.build_opener(handler)
# 此处的open方法同urllib2的urlopen方法,也可以传入request
response = opener.open('http://www.weibo.com')
# 便利cookie中的值
for item in cookie:
print 'Name = ' + item.name
print 'Value = ' + item.value
运行结果如下
Name = YF-Ugrow-G0
Value = 3a02f95fa8b3c9dc73c74bc9f2ca4fc6
那么如何利用Cookie来抓取网页呢,这里介绍一个build_opener()方法,前面使用的urlopen()方法只不过是一个特殊的build_opener(),这个方法支持HTTP,FTP还有HTTPS,支持的范围更广,在urllib2.py中是这样写的
The opener will use several default handlers, including support for HTTP, FTP and when applicable, HTTPS.
我们通过cookies = cookielib.CookieJar()
创建一个cookies对象,在build_opener中传入opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cookies)再通过opener的open()方法去请求URL,opener.open(URL)
这样我们就可以使用cookie了,是不是soeasy (^o^)/~
session技术
session不属于爬虫的但是在会话管理中和cookies有同样的地位,简单介绍一下。
session技术的特点
- 会话数据放在服务器端(服务器内存),占用服务器资源
- 数据类型任意类型,没有大小限制的
- 相对安全
在java中session的使用步骤是这样的
- 创建HttPSession对象,用于保存会话数据
- 修改HttpSeession对象
- 保存会话数据(作为域对象)
session = request.getSession(); 创建对象
void setMaxInactiveInterval(int interval);设置有效时间
session.setAttribute("name",Object); 保存数据
session.getAttribute("name"); 获取数据
session.removeAttribute("name"); 删除数据