基本概念:
Cookie,有时也用其复数形式Cookies,指某些网站为了辨别用户身份、进行session跟踪而储存在用户本地终端上的数据(通常经过加密)。
Cookie是由服务器端生成,发送给User-Agent(一般是浏览器),浏览器会将Cookie的key/value保存到某个目录下的文本文件内,下次请求同一网站时就发送该Cookie给服务器(前提是浏览器设置为启用cookie)。Cookie名称和值可以由服务器端开发自己定义,这样服务器可以知道该用户是否是合法用户以及是否需要重新登录等,服务器可以设置或读取Cookies中包含信息,借此维护用户跟服务器会话中的状态。
服务器可以利用Cookies包含信息的任意性来筛选并经常性维护这些信息,以判断在HTTP传输中的状态。Cookies最典型的应用是判定注册用户是否已经登录网站,用户可能会得到提示,是否在下一次进入此网站时保留用户信息以便简化登录手续,这些都是Cookies的功用。
下面提供一个python实现的最简单的web服务器,支持登录。
环境要求:
1. linux
2. 安装bottle:easy_install bottle
3. httpserver.py和login.html放到同一个目录下
4. 运行:python httpserver.py
5. 测试:在浏览器输入下面的url,记住把ip(192.168.1.103)换成你的ip,账号密码都是test
http://192.168.1.103:8080/login
http://192.168.1.103:8080/cookie
6.这里的cookie经过了简单的加密,有兴趣可以看看bottle.py的源码
httpserver.py源码
#!/usr/bin/python
#coding:utf-8
from bottle import run, route, request, response, static_file, template
g_user = "test"
g_passwd = "test"
g_secret = "some-secret-key"
def check_user_right(user, passwd):
if user == g_user and passwd == g_passwd:
return True;
else:
return False;
@route('/login', method="GET")
def login():
username = request.get_cookie("account", secret=g_secret)
if username:
return template("Hello {{name}}. Welcome back.", name=username)
else:
return static_file("login.html", "./")
@route('/login', method="POST")
def login():
username = request.POST['user']
passwd = request.POST['passwd']
if check_user_right(username, passwd):
response.set_cookie("account", username, secret=g_secret)
return "Login success"
else:
return "Login failed"
@route('/cookie', method="GET")
def cookie_test():
username = request.get_cookie("account", secret=g_secret)
if username:
return template("Hello {{name}}. Welcome back.", name=username)
else:
return "You are not logged in. Access denied."
if __name__ == '__main__':
run(host='0.0.0.0', port=8080, debug=True)
login.html源码
<form action="/login" method="post">
user:
<input type="text" name="user" />
<br />
passwd:
<input type="text" name="passwd" />
<br />
<input type="submit" value="Submit" />
</form>