zoukankan      html  css  js  c++  java
  • python学习笔记(3)---cookie & session

    一、cookie & session

      1、cookie:

        cookie 就是由服务器发送给客户端的特殊信息,而这些信息以文本的方式存放在客户端,然后客户端每次向服务器发送请求都会带上这些特殊信息。让服务器来识别你的计算机。例如:你访问某些网站的时候,一些网站登录界面问是否保存密码,如果你选择保存后再登录,那么下次访问网站的时候就不许重复登录动作了,这就是Cookie实现的。

      cookie缺点:

        ① cookie数量和长度限制,每个domain最多只能有20条cookie,并且每个cookie长度不能超过4k

        ② 安全性问题,如果cookie被人拦截,那个人就能拿到session信息

        ③ 有些状态无法保存在客户端

        虽然cookie有这些缺点,但是cookie能够很好的做身份识别。

      2、session:

        session称为“会话控制”,session对象存储特定用户会话所需的属性及配置信息。当用户在Web页跳转时,存储在session对象中的变量不会丢失。

        session和cookie区别:

          ① cookie数据存储在客户的浏览器上,session数据放在服务器上

          ② cookie不是很安全,别人可以分析存放在本地的cookie并进行cookie欺骗,考虑到安全应当使用session

          ③ session会在一定时间内保存在服务器上。当访问增多,会比较占用你服务器的性能,考虑到减轻服务器性能方面,应当使用cookie

          ④ 单个cookie保存的数据不能超过4k,很多浏览器都限制一个站点最多保存20个cookie

          ⑤ 登录信息等重要信息存放为session,某些需要保留的信息放在cookie

    二、手动使用cookie登录

      比较傻的方法:直接复制cookie,手动放入请求头

     1 from urllib import request
     2 if __name__ =="__main__":
     3     # 模拟登录人人个人主页
     4     url = "http://www.renren.com/967981984/profile"
     5     headers={
     6         "cookie":"anonymid=jlxrqipq-yd1b41; depovince=BJ; _r01_=1; JSESSIONID=abcrdbDitjgodcWbI_kxw; ick_login=666ef91c-38c0-4863-b69f-bd9b48f23b6a; t=ab090cc8a1b9e5a93991f467cf8f3eab4; societyguester=ab090cc8a1b9e5a93991f467cf8f3eab4; id=967981984; xnsid=3505b17e; jebecookies=e7f4d1cc-1fd5-4e3d-82e2-57fc6f652835|||||; ver=7.0; loginfrom=null; wp_fold=0; jebe_key=7da3f557-b4af-410d-b7c8-07ef5c61cd3a%7C873bc0529825e88a727db5146c0adb40%7C1536708771061%7C1"
     7     }
     8     req = request.Request(url, headers = headers)
     9     res = request.urlopen(req)
    10     html = res.read().decode()
    11     # 把页面保存到本地
    12     with open("res.html", "w") as f:
    13         f.write(html)

    三、使用cookie自动登录

      http模块中有一些cookie模块,通过他们我们可以自动使用cookie

      1、CookieJar

        - 管理存储cookie,向传出的http请求添加cookie

        - cookie存储在内存中,CookJar实例回收后cookie将消失

      2、FileCookieJar(filename, delayload = None, policy = None)

        - 使用文件管理cookie

        - filename是保存的文件的名字

      3、MozillaCookieJar(filename, delayload = None, policy = None)

        - 创建与mocilla(火狐)浏览器cookie.txt兼容的FileCookieJar

      4、LwpCookieJar(filename, delayload = None, policy = None)

        - 创建与LwpCookieJar标准兼容的Set-Cookie3格式的FileCookieJar

      关系 CookieJar -> FileCookieJar -> MozillaCookieJar -> LwpCookieJar

      利用cookieJar访问人人

      代码实现流程:  

        1、打开登录页面自动通过账号和密码

        2、自动提取反馈回来的cookie

        3、利用提取的cookie登录隐私页面

     1 from urllib import request,parse
     2 from http import cookiejar
     3 # 创建cookiejar实例
     4 cookie = cookiejar.Cookiejar()
     5 # 生成cookiejar管理器
     6 cookie_handler = request.HTTPCookieProcessor(cookie)
     7 # 创建http管理器
     8 http_handler = request.HTTPHandler()
     9 # 创建https管理器
    10 https_handler = request.HTTPSHandler()
    11 # 创建请求管理器
    12 opener = request.build_opener(http_handler, https_handler, cookie_handler)
    13 
    14 # 登录函数
    15 def login():
    16     '''
    17     负责初次登录
    18     需要输入用户名、密码来获取登录cookie的凭证
    19     '''
    20     # 通过抓包获取的登录页面
    21     url = "http://www.renren.com/PLogin.do"
    22     # email 是登录账号   password是登录密码    
    23     data = {
    24          "email":"13119144223",
    25          "password":"123456"
    26     }
    27     data = parse.urlencode(data)
    28     req = request.Request(url, data = data.encode()) 
    29     rsq = opener.open(req)
    30 def getHomePage():
    31     url = "http://www.renren.com/967981984/profile"
    32     # 如果已经执行了Login函数,则opener自动包含相应的cookie值
    33     rsp = opener.open(url)
    34     html = rsp.read().decode()
    35     with open("rsp.html", "w") as f:
    36           f.write(html)
    37 if __name__ =='__main__':
    38     login()
    39     getHomePage()

     四、cookie属性

      使用代码查看cookie属性

    from urllib import request,parse
    from http import cookiejar
    cookie = cookiejar.CookieJar()
    cookie_handler = request.HTTPCookieProcessor(cookie)
    http_handler = request.HTTPHandler()
    https_handler = request.HTTPSHandler()
    opener = request.build_opener(http_handler, https_handler,  cookie_handler)
    
    def login():
        url = "http://www.renren.com/PLogin.do"
        data = {
            "email":"13119144223"
            "password":"123456"
        }
        data = parse.urlencode(data)
        req = request.Request(url, data= data.encode())
        rsp = opner.open(req)
    
    if __name__ == "__main__":
        login()
        print(cookie)
        for item in cookie:
            print(item)

    执行结果:

      cookie属性

        - name:名称

        - value:值

        - domain:可以访问此cookie域名

        - path:可以访问cookie的页面路径

        - expire:过期时间

        - size:大小

        - http:字段

    四、文件保存FileCookieJar

     1 from urllib import request, parse
     2 from http import cookiejar
     3 #创建cookie文件
     4 filename = "cookie.txt"
     5 # 创建MOzillacookiejar实例
     6 cookie = cookiejar.MozillaCookieJar(filename)
     7 # 生成cookiejar管理器
     8 cookie_handler = request.HTTPCookieProcessor(cookie)
     9 # http管理器
    10 http_handler = request.HTTPHandler()
    11 # https管理器
    12 https_handler = request.HTTPSHandler()
    13 # opener管理器
    14 opener = request.bulid_opener(http_handler, https_landler, cookie_handler)
    15 
    16 def login():
    17     url = "http://www.renren.com/PLogin.do"
    18     data = {
    19         "email": "13119144223",
    20         "password": "123456"
    21     }
    22     data = parse.urlencode(data)
    23     req = request.Request(url, data = data.encode())
    24     res = opener.open(req)
    25     cookie.save(ignore_discard=True, ignore_expires=True)
    26 if __name__ =='__main__':
    27     login()

      第27行可以直接cookie.save()不带参数

      ignore_discard=True  :将要丢弃cookie的也保存

       ignore_expires=True : 如果文件中的cookie已过期,继续保存

      

  • 相关阅读:
    linux下php调试工具xdebug安装配置
    linux下php开发环境搭建(nginx+php+mysql)
    centos7使用docker部署gitlab-ce-zh应用
    CentOS7上Docker安装与卸载
    struts2 中 paramsPrepareParamsStack 拦截器
    ModelDriven & Preparable 接口
    OLW Test
    sqlserver 错误:2,错误40
    C#时间截
    http post发送
  • 原文地址:https://www.cnblogs.com/MoonlightMaleGod/p/9638508.html
Copyright © 2011-2022 走看看