Cookie与Session的处理
1. Cookie的认知
实际过程中,大家经常听到Cookie与Session。其中Cookie是放在浏览器端(客户端);Session放在服务器端,每个客户在服务器端都有与其对应的Session。
在网站中,http请求是无状态的。简单来说即第一次和服务器连接且登录成功后,第二次请求服务器依然不能知道当前请求是哪个用户。而Cookie的出现就是为了解决该问题,第一次登录后服务器返回一些数据(Cookie)给浏览器,然后浏览器会将其保存在本地,当该用户发送第二次请求的时候,就会自动的把上次请求存储的Cookie数据自动的传递给服务器,服务器通过浏览器携带的数据就能判断当前用户是哪个了。
Cookie存储的数据量有限,不同的浏览器有不同的存储大小,一般不超过4KB。因此Cookie只能存储一些小量的数据。
Cookie是由网络服务器发送出来存储在网络浏览器上,下次同一客户再次访问该服务器时,可从该浏览器读取此信息。Cookie让浏览器记住这位访客的特定信息,如上次访问的位置等。
Cookie 是个存储在浏览器目录的文本文件,当浏览器运行时,存储在 RAM 中。一旦你从该网站或网络服务器退出,Cookie 也可存储在计算机的硬盘上。当访客结束其浏览器对话时,即终止所有 Cookie。
Cookie可以保持登录信息到用户下次与服务器的会话,换句话说,下次访问同一网站时,用户会发现不必输入username和pwd就已经登录了。但有一些Cookie在用户退出会话的时候就被删除了(用户也可手工删除本地Cookie),这样可以有效保护个人隐私。
Cookie在生成时会被指定一个Expire值,这就是Cookie的生存周期,在这个周期内Cookie有效,超出周期Cookie就会被清除。有些页面将Cookie的生存周期设置为“0”或负值,这样在关闭浏览器时,就马上清除Cookie,不会记录用户信息,更加安全。
2.Cookie的属性
一般Cookie所具有的属性,包括:
**1. Domain:域 **
Domain:域,表示当前Cookie所属于哪个域或子域下面;对于服务器返回的Set-Cookie中,如果没有指定Domain的值,那么其Domain的值是默认为当前所提交的http的请求所对应的主域名。比如访问 http://www.example.com,返回一个cookie,没有指名domain值,那么其值为默认的www.example.com;
2. Path
Path:表示Cookie的所属路径;
3. Expire time/Max-age
Expire time/Max-age:表示了Cookie的有效期。expire的值,是一个时间,过了这个时间,该Cookie就失效了。或者是用max-age指定当前Cookie是在多长时间之后而失效。如果服务器返回的一个Cookie,没有指定其expire time,那么表明此Cookie有效期只是当前的Session,即是session cookie,当前Session会话结束后,就过期了。对应的,当关闭(浏览器中)该页面的时候,此cookie就被浏览器删除了;
4.secure
secure:表示该Cookie只能用https传输。一般用于包含认证信息的Cookie,要求传输此cookie的时候,必须用https传输;
5.httponly
httponly:表示此Cookie必须用于http或https传输。这意味着,浏览器脚本(比如Javascript中)是不允许访问操作Cookie。
对于一些需要输入验证码才能登陆的网站,可以采用Cookie来解决问题。
- 获取Cookies的方法:get_cookies();
- 获取指定name的Cookie:driver.get_cookie(name);
- 清除Cookie:delete_cookie()。
3. 获取cookie
3.1 未登录网站
打开浏览器,而不输入任何网址,查看Cookie。
from selenium import webdriver
from time import sleep
#仅仅启动浏览器后,观察cookies
driver = webdriver.Firefox()
print("仅仅启动浏览器后的cookies == %s" % driver.get_cookies())
driver.quit()
结果:Cookies值为空
仅仅启动浏览器后的cookies == []
3.2 获取Cookie(仅仅打开网站)
打开浏览器,打开51cto的登录页,再获得cookies。
from selenium import webdriver
from time import sleep
#仅仅启动浏览器后,观察cookies
driver = webdriver.Firefox()
print("仅仅启动浏览器后的cookies == %s" % driver.get_cookies())
sleep(2)
driver.get("https://home.51cto.com/index?reback=http://www.51cto.com/")
#启动启动浏览器后,打开51cto网站,观察cookies
print("打开51cto网站后的cookies == %s" % driver.get_cookies())
sleep(2)
driver.quit()
运行结果,观察到Cookie的内容如下:
打开51cto网站后的
cookies == [{'name': 'waf_cookie', 'value': '95e69c9e-fb7a-4f25c8a6a40e1e70de0d13a1aa4db5c91dac', 'path': '/', 'domain': 'home.51cto.com', 'secure': False, 'httpOnly': True}, {'name': 'acw_tc', 'value': '2760826615830716737054425e572528b6ee0a77b6c7f775925c4cc8da5e38', 'path': '/', 'domain': 'home.51cto.com', 'secure': False, 'httpOnly': True, 'expiry': 1585750075}, {'name': 'PHPSESSID', 'value': 'g6pfj5a2fsk8mluifre3affm65', 'path': '/', 'domain': 'home.51cto.com', 'secure': False, 'httpOnly': True}, {'name': '_csrf', 'value': 'eab71d25bbb517398da316a7767175c406ee473aa513645b039a9d544c87b4b7a%3A2%3A%7Bi%3A0%3Bs%3A5%3A%22_csrf%22%3Bi%3A1%3Bs%3A32%3A%22BMUMbCHkLJaFBgJ7ZWq7RRCqqi1HhqH6%22%3B%7D', 'path': '/', 'domain': 'home.51cto.com', 'secure': False, 'httpOnly': True}, {'name': '_ourplusFirstTime', 'value': '120-3-1-22-7-54', 'path': '/', 'domain': 'home.51cto.com', 'secure': False, 'httpOnly': False, 'expiry': 1619071674}, {'name': '_ourplusReturnTime', 'value': '120-3-1-22-7-54', 'path': '/', 'domain': 'home.51cto.com', 'secure': False, 'httpOnly': False, 'expiry': 1619071674}, {'name': '_ourplusReturnCount', 'value': '1', 'path': '/', 'domain': 'home.51cto.com', 'secure': False, 'httpOnly': False, 'expiry': 1619071674}, {'name': 'www51cto', 'value': '50DD08DE4D45347E6D9C324988918495Xnbn', 'path': '/', 'domain': '.51cto.com', 'secure': False, 'httpOnly': False, 'expiry': 1898431674}, {'name': 'Hm_lvt_844390da7774b6a92b34d40f8e16f5ac', 'value': '1583071675', 'path': '/', 'domain': '.home.51cto.com', 'secure': False, 'httpOnly': False, 'expiry': 1614607675}, {'name': 'Hm_lpvt_844390da7774b6a92b34d40f8e16f5ac', 'value': '1583071675', 'path': '/', 'domain': '.home.51cto.com', 'secure': False, 'httpOnly': False}]
3.3 获得Cookie(登录后)
先登录51cto网站,在获得Cookies,运行代码,观察到输出的Cookie有了变化。
from selenium import webdriver
from time import sleep
#仅仅启动浏览器后,观察cookies
driver = webdriver.Firefox()
print("仅仅启动浏览器后的cookies == %s" % driver.get_cookies())
sleep(2)
driver.get("https://home.51cto.com/index?reback=http://www.51cto.com/")
#启动浏览器后,打开51cto网站,观察cookies
print("打开51cto网站后的cookies == %s" % driver.get_cookies())
sleep(2)
driver.find_element_by_xpath("//*[@id='login-wechat']/div[3]/a").click()
driver.find_element_by_xpath("//*[@id='loginform-username']").send_keys("hb****")
driver.find_element_by_xpath('//*[@id="loginform-password"]').send_keys("87654321")
# driver.find_element_by_id("loginform-password").send_keys("87654321") #定义pwd,通过id也可的哦
driver.find_element_by_xpath('//*[@id="login-form"]/div[4]/input[1]').click()
sleep(2)
print("登录51cto网站后的cookies == %s" % driver.get_cookies())
sleep(2)
driver.quit()
结果:
登录51cto网站后的
cookies == [{'name': 'www51cto', 'value': '50DD08DE4D45347E6D9C324988918495Xnbn', 'path': '/', 'domain': '.51cto.com', 'secure': False, 'httpOnly': False, 'expiry': 1898431674}, {'name': 'pub_sauth1', 'value': 'CQZVHBVWBVM6DQQJUA1fPQUGDFdWBQQHVVo', 'path': '/', 'domain': '.51cto.com', 'secure': False, 'httpOnly': True, 'expiry': 1583935680}, {'name': 'pub_sauth2', 'value': '83976623bdbfba728859ba24480e9d78', 'path': '/', 'domain': '.51cto.com', 'secure': False, 'httpOnly': True, 'expiry': 1583935680}, {'name': 'pub_cookietime', 'value': '864000', 'path': '/', 'domain': '.51cto.com', 'secure': False, 'httpOnly': True, 'expiry': 1583935680}, {'name': 'pub_wechatopen', 'value': 'aG0wVVBdBFIEBQQGWg', 'path': '/', 'domain': '.51cto.com', 'secure': False, 'httpOnly': True, 'expiry': 1585663680}, {'name': 'pub_sauth3', 'value': 'UgQMAFQJVARRWgVWBAMEUwpVUFoAAlpWAlcAWlEHAwMAAl0OVggHVGxQBwFTBVdQBgReDFdSBwEHUwYNAVVUU1FVXQZVWwEFV1sDV1EFUAdWPlcNW1JSAgBTAQA', 'path': '/', 'domain': '.51cto.com', 'secure': False, 'httpOnly': True, 'expiry': 1583935680}, {'name': 'waf_cookie', 'value': 'b6ffca6f-f59f-40e7621bd3c842b5b5f0d84d41de6d6065d6', 'path': '/', 'domain': 'www.51cto.com', 'secure': False, 'httpOnly': True}, {'name': 'acw_tc', 'value': '2760828515830716798753340e43a84ecf598bb85eaeea74247db3f9f4488e', 'path': '/', 'domain': 'www.51cto.com', 'secure': False, 'httpOnly': True, 'expiry': 1585750081}]
测试学习路线如下