一个支持cookie的简单web服务器

本文介绍了一个使用Python Bottle框架实现的简易Web服务器,支持用户登录功能,并通过Cookie记录用户状态。介绍了Cookie的基本概念及其在服务器端和客户端之间的交互过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


基本概念:

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.pylogin.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>


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值