1.含义Cookie意为“甜蜜的饼干”,由W3C组织提出,最早由Netscape社区开发。目前,cookies已经成为一种标准,IE、Netscape、Firefox、Opera等主流浏览器都支持cookies。由于HTTP是无状态协议,服务器无法仅从网络连接中获知客户端的身份,那怎么办呢?给客户发一张通行证,一人一张,无论谁来,都必须带上自己的通行证。这样,服务器就可以从护照上确认客户的身份,这就是cookies的工作原理。Cookie实际上是一小段文本信息。客户端向服务器发起请求,如果服务器需要记录用户状态,则使用响应向客户端浏览器下发cookie,客户端浏览器保存该cookie。当浏览器再次请求该网站时,浏览器将请求的URL连同cookie一起提交给服务器。服务器检查cookie以识别用户状态。所以Cookie是一种客户端技术。Session可以理解为一个抽象的概念,即会话。Session用于记录用户在我们网站上的一些行为和状态。可以理解为语境。这些用户状态可以通过cookie中的SessionID来识别。在其他一些上下文中,Session也可以参考后台保存用户状态的方式来实现session。它将用户状态存储在后台内存、数据库等介质中,然后我们通过请求的cookie中保存的SessionID来查找本次请求对应的session。Session是一种服务器端技术。服务器可以在运行时为每个用户的浏览器创建一个独占的Session对象。由于Session是用户浏览器独有的,所以用户在访问服务器的网页资源时可以使用自己的。数据放在自己的Session中,当用户访问服务器中的其他web资源时,其他web资源会从用户各自的Session中取数据为用户服务。2、有效期:cookie的maxAge决定了cookie的有效期,以秒为单位。如果maxAge属性为正数,则表示cookie将在maxAge秒后自动过期。浏览器会将maxAge为正数的cookie持久化,即写入对应的cookie文件中。无论客户是否关闭浏览器或电脑,只要还在maxAge秒之前,登录网站时cookie仍然有效。以下代码中的cookie信息将始终有效。如果maxAge为负数,则表示cookie只在本浏览器窗口和本窗口打开的子窗口有效,关闭窗口后cookie失效。maxAge为负数的cookie是临时cookie,不会被持久化,也不会写入cookie文件。Cookie信息保存在浏览器的内存中,因此当浏览器关闭时cookie消失。cookie的默认maxAge值为–1。如果maxAge为0,则表示删除cookie。cookie机制没有提供删除cookie的方法,所以可以通过设置cookie立即过期来达到删除cookie的效果。无效的cookies将被浏览器从cookie文件或内存中删除。随着越来越多的用户访问服务器,会话也会越来越多。为了防止内存溢出,服务器会从内存中删除长时间不活动的会话。这个时间是会话超时。如果超过超时时间还没有访问服务器,Session将自动失效。3、面试中可能遇到的问题。Session在服务器端,Cookie保存在客户端(浏览器)。默认情况下,会话存储在服务器上的文件中(而不是内存中)。Session的运行依赖于Sessionid,而Sessionid存在于cookie中,也就是说如果浏览器禁用了cookie,那么Session也会失效(但是可以通过其他方式实现,比如在url中传递Session_id)。Session可以放在文件、数据库或内存中。Cookie不能跨域名。四、反爬虫技术中的应用在一些网站中,用户需要使用个人信息登录才能看到更多信息。如果用爬虫程序模拟人的登录行为,主要有以下三种:访问页面时。从header中找到cookie并复制,然后写入python脚本中的headers。这种方法的问题在于,如上所述,cookie是时间敏感的。这种方法需要手动更换,比较麻烦,不推荐。通过session方法,后续使用类似于request.get、request.post等。最推荐的方法,代码如下:data={"name":"填写用户名","passwd":"填写登录密码"}#通过session模拟登录,每次请求用session=requests.Session()f=s.post(url,data=data,headers=headers)
