apach cgi 获取和设置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信息。

python的实现方法:

def setCookie():
     print "Content-type: text/html\n\n"
     c=Cookie.SimpleCookie()
     c['session']='admin'
     c['session']['max-age']=60*60
     print c
     return True

def checkCookie():
    cookie=Cookie.SimpleCookie()
    if os.environ.has_key('HTTP_COOKIE'):
        cookie.load(os.environ['HTTP_COOKIE'])
        if cookie['session'].value=='admin':
            return True
    return False

C语言的实现方法:

#include <stdio.h>
#include "cgic.h "
#include <string.h>
#include <stdlib.h>
test1.cgi
int cgiMain()
{
char username[25]= "uuuu ";
char pass[25] = "123 ";
//printf( "Set-Cookie:username=%s;Set-Cookie:password=%s\n ",username,pass);

printf( "Set-Cookie: username=%s; path=/\r\n ", username);
printf( "Set-Cookie: password=%s; path=/\r\n ", pass);
cgiHeaderContentType( "text/html ");

printf( " <a href=test2> 1111 </a> ");
return 0;
}
test2

#include <stdio.h>
#include "cgic.h "
#include <string.h>
#include <stdlib.h>

int cgiMain()
{

cgiHeaderContentType( "text/html ");
printf( "Cookie:%s\n ",getenv( "HTTP-COOKIE "));
return 0;
}

下面是python相对完整的策略:

#!/usr/bin/python
# -*- coding: UTF-8 -*-
# 
print 'Content-Type: text/html'
print 'Set-Cookie: name="菜鸟教程";expires=Wed, 28 Aug 2016 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的情况,下面是检查cookie的情况:

#!/usr/bin/python
# -*- coding: UTF-8 -*-

# 导入模块
import os
import Cookie

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.load(cookie_string)

    try:
        data=c['name'].value
        print "cookie data: "+data+"<br>"
    except KeyError:
        print "cookie 没有设置或者已过去<br>"
print """
</body>
</html>

"""

从以上的说明基本可以看出,调用cgi的时候是有一个环境变量传进来的;
变量名 描述

  • CONTENT_TYPE 这个环境变量的值指示所传递来的信息的MIME类型。目前,环境变量CONTENT_TYPE一般都是:application/x-www-form-urlencoded,他表示数据来自于HTML表单。
  • CONTENT_LENGTH 如果服务器与CGI程序信息的传递方式是POST,这个环境变量即使从标准输入STDIN中可以读到的有效数据的字节数。这个环境变量在读取所输入的数据时必须使用。
  • HTTP_COOKIE 客户机内的 COOKIE 内容。
  • HTTP_USER_AGENT 提供包含了版本数或其他专有数据的客户浏览器信息。
  • PATH_INFO 这个环境变量的值表示紧接在CGI程序名之后的其他路径信息。它常常作为CGI程序的参数出现。
  • QUERY_STRING 如果服务器与CGI程序信息的传递方式是GET,这个环境变量的值即使所传递的信息。这个信息经跟在CGI程序名的后面,两者中间用一个问号’?'分隔。
  • REMOTE_ADDR 这个环境变量的值是发送请求的客户机的IP地址,例如上面的192.168.1.67。这个值总是存在的。而且它是Web客户机需要提供给Web服务器的唯一标识,可以在CGI程序中用它来区分不同的Web客户机。
  • REMOTE_HOST 这个环境变量的值包含发送CGI请求的客户机的主机名。如果不支持你想查询,则无需定义此环境变量。
  • REQUEST_METHOD 提供脚本被调用的方法。对于使用 HTTP/1.0 协议的脚本,仅 GET 和 POST 有意义。
  • SCRIPT_FILENAME CGI脚本的完整路径
  • SCRIPT_NAME CGI脚本的的名称
  • SERVER_NAME 这是你的 WEB 服务器的主机名、别名或IP地址。
  • SERVER_SOFTWARE 这个环境变量的值包含了调用CGI程序的HTTP服务器的名称和版本号。例如,上面的值为Apache/2.2.14(Unix)
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值