美文网首页
Python CGI中使用Cookie

Python CGI中使用Cookie

作者: S大偉 | 来源:发表于2018-11-26 17:21 被阅读25次

    注意

    • 如果运行不起来,可以修改引用路径
    • print后的空格去掉
    • chmod 755 fileName.py

    在 http 协议一个很大的缺点就是不对用户身份的进行判断,这样给编程人员带来很大的不便, 而 cookie 功能的出现弥补了这个不足。
    cookie 就是在客户访问脚本的同时,通过客户的浏览器,在客户硬盘上写入纪录数据 ,当下次客户访问脚本时取回数据信息,从而达到身份判别的功能,cookie 常用在身份校验中。

    cookie的语法

    http cookie的发送是通过http头部来实现的,他早于文件的传递,头部set-cookie的语法如下:

    Set-cookie:name=name;expires=date;path=path;domain=domain;secure 
    
    • name=name: 需要设置cookie的值(name不能使用";"和","号),有多个name值时用 ";" 分隔,例如:name1=name1;name2=name2;name3=name3。
    • expires=date: cookie的有效期限,格式: expires="Wdy,DD-Mon-YYYY HH:MM:SS"
    • path=path: 设置cookie支持的路径,如果path是一个路径,则cookie对这个目录下的所有文件及子目录生效,例如: path="/cgi-bin/",如果path是一个文件,则cookie指对这个文件生效,例如:path="/cgi-bin/cookie.cgi"。
    • domain=domain: 对cookie生效的域名,例如:domain="www.runoob.com"
    • secure: 如果给出此标志,表示cookie只能通过SSL协议的https服务器来传递。
    • cookie的接收是通过设置环境变量HTTP_COOKIE来实现的,CGI程序可以通过检索该变量获取cookie信息。

    Cookie设置

    Cookie的设置非常简单,cookie会在http头部单独发送。以下实例在cookie中设置了name 和 expires:

    #!/usr/bin/python3
    # 
    print ('Content-Type: text/html')
    print ('Set-Cookie: name="菜鸟教程";expires=Wed, 28 Aug 2019 18:30:00 GMT')
    print ()
    print ("""
    <html>
      <head>
        <meta charset="utf-8">
        <title>菜鸟教程(runoob.com)</title>
      </head>
        <body>
            <h1>Cookie set OK!</h1>
        </body>
    </html>
    """)
    

    将以上代码保存到 cookie_set.py,并修改 cookie_set.py 权限:

    chmod 755 cookie_set.py
    

    以上实例使用了 Set-Cookie 头信息来设置Cookie信息,可选项中设置了Cookie的其他属性,如过期时间Expires,域名Domain,路径Path。这些信息设置在 "Content-type:text/html"之前。

    cookie_setpy.png

    检索Cookie信息

    Cookie信息检索页非常简单,Cookie信息存储在CGI的环境变量HTTP_COOKIE中,存储格式如下:

    key1=value1;key2=value2;key3=value3....
    

    以下是一个简单的CGI检索cookie信息的程序:

    #!/usr/bin/python3
    
    # 导入模块
    import os
    import http.cookies
    
    print ("Content-type: text/html")
    print ()
    
    print ("""
    <html>
    <head>
    <meta charset="utf-8">
    <title>菜鸟教程(runoob.com)</title>
    </head>
    <body>
    <h1>读取cookie信息</h1>
    """)
    
    if 'HTTP_COOKIE' in os.environ:
        cookie_string=os.environ.get('HTTP_COOKIE')
        #c=Cookie.SimpleCookie() 坑
        c=http.cookies.SimpleCookie()
        c.load(cookie_string)
    
        try:
            data=c['name'].value
            print ("cookie data: "+data+"<br>")
        except KeyError:
            print ("cookie 没有设置或者已过去<br>")
    print ("""
    </body>
    </html>
    """)
    

    将以上代码保存到 cookie_get.py,并修改 cookie_get.py 权限:

    chmod 755 cookie_get.py
    

    效果


    cookie_get.png

    相关文章

      网友评论

          本文标题:Python CGI中使用Cookie

          本文链接:https://www.haomeiwen.com/subject/vcnvqqtx.html