基于hi-nginx的web开发(python篇)——cookie和会话管理

本文涉及的产品
Redis 开源版,标准版 2GB
推荐场景:
搭建游戏排行榜
云数据库 Tair(兼容Redis),内存型 2GB
简介: hi-nginx通过redis管理会话。要开启管理,需要做三件事。第一件开启userid: userid on; userid_name SESSIONID; userid_domain localhost; userid_path /; userid_expires 300s;这个功能是nginx内建的,可以直接使用。

hi-nginx通过redis管理会话。

要开启管理,需要做三件事。

第一件开启userid:

        userid                  on;
        userid_name             SESSIONID;
        userid_domain           localhost;
        userid_path             /;
        userid_expires          300s;

这个功能是nginx内建的,可以直接使用。需要注意的是,hi-nginx只认识SESSIONID的userid_name。

第二件是配置redis服务器:

        hi_redis_host 127.0.0.1;
        hi_redis_port 6379;

当然,你应该先安装redis并确保它运行。

第三件是在location段开启会话管理:

    location  /  {
            hi_need_session on;
            hi_session_expires 300s;
            hi_python_script python/index.py;
    }

整个nginx配置写下来,就是:

 1 server {
 2     listen 8080;
 3     server_name localhost;
 4 
 5         userid                  on;
 6         userid_name             SESSIONID;
 7         userid_domain           localhost;
 8         userid_path             /;
 9         userid_expires          300s;
10 
11         hi_redis_host 127.0.0.1;
12         hi_redis_port 6379;
13 
14     
15     location / {
16         hi_need_cache off;
17         hi_cache_expires 5s;
18 
19         hi_need_session on;
20         hi_session_expires 300s;
21         hi_python_script python/index.py;
22     }
23 }

需要注意是,应该确保hi_session_expires和userid_expires的值保持一致。

配置写完后,记得reload或者restart nginx。

 

接下来就是使用会话管理的api了。

说来太简单,都不好意思写出来,用req.has_session,req.get_session和res.session即可:

@app.route('^/session/?$',['GET'])
def session(req,res,param):
    k='test'
    v=0
    if req.has_session(k):
        v=int(req.get_session(k))
        res.session(k,str(v+1))
    else:
        res.session(k,str(v))
    res.content('{}={}'.format(k,v))
    res.status(200)

 

那么,cookie怎么办?人们使用cookie的一大用途建立会话机制。上文已经把会话管理的使用说清楚了。所以使用hi.py框架时不需要特别留意cookie的管理。当然,如果你想自己管理cookie,hi-nginx也提供req.has_cookie和req.get_cookie两个只读api。如果要写api,可以使用res.header来写。比如:

在location段中添加hi_need_cookies on

1     location / {
2         hi_need_cache off;
3         hi_cache_expires 5s;
4         hi_need_cookies on;
5         hi_need_session on;
6         hi_session_expires 300s;
7         hi_python_script python/index.py;
8     }

在操作函数中在添加相关操作:

@app.route('^/session/?$',['GET'])
def session(req,res,param):
    k='test'
    v=0
    if req.has_session(k):
        v=int(req.get_session(k))
        res.session(k,str(v+1))
    else:
        res.session(k,str(v))
    cv=v
    if req.has_cookie(k):
        cv=int(req.get_cookie(k))
        res.header('Set-Cookie','{}={};Path={};Domain={}'.format(k,cv+1,'/','localhost'))
    else:
        res.header('Set-Cookie','{}={};Path={};Domain={}'.format(k,cv,'/','localhost'))
    res.content('session:{0}={1},cookie:{0}={2}'.format(k,v,cv))
    res.status(200)

如上所见,在hi.py中操控和管理cookie和会话是非常方便的,用来写个登陆或者购物车什么的,配合hi.py的jinja2模板引擎,简直易如反掌。

 

相关实践学习
基于Redis实现在线游戏积分排行榜
本场景将介绍如何基于Redis数据库实现在线游戏中的游戏玩家积分排行榜功能。
云数据库 Redis 版使用教程
云数据库Redis版是兼容Redis协议标准的、提供持久化的内存数据库服务,基于高可靠双机热备架构及可无缝扩展的集群架构,满足高读写性能场景及容量需弹性变配的业务需求。 产品详情:https://www.aliyun.com/product/kvstore     ------------------------------------------------------------------------- 阿里云数据库体验:数据库上云实战 开发者云会免费提供一台带自建MySQL的源数据库 ECS 实例和一台目标数据库 RDS实例。跟着指引,您可以一步步实现将ECS自建数据库迁移到目标数据库RDS。 点击下方链接,领取免费ECS&RDS资源,30分钟完成数据库上云实战!https://developer.aliyun.com/adc/scenario/51eefbd1894e42f6bb9acacadd3f9121?spm=a2c6h.13788135.J_3257954370.9.4ba85f24utseFl
目录
相关文章
|
12天前
|
存储 缓存 数据处理
php学习笔记-php会话控制,cookie,session的使用,cookie自动登录和session 图书上传信息添加和修改例子-day07
本文介绍了PHP会话控制及Web常用的预定义变量,包括`$_REQUEST`、`$_SERVER`、`$_COOKIE`和`$_SESSION`的用法和示例。涵盖了cookie的创建、使用、删除以及session的工作原理和使用,并通过图书上传的例子演示了session在实际应用中的使用。
php学习笔记-php会话控制,cookie,session的使用,cookie自动登录和session 图书上传信息添加和修改例子-day07
|
4月前
|
存储 编解码 应用服务中间件
会话跟踪技术(Session 以及Cookie)
会话跟踪技术(Session 以及Cookie)
|
27天前
|
安全 Go PHP
Web安全-会话ID漏洞
Web安全-会话ID漏洞
13 3
|
5月前
|
存储 Web App开发 安全
Cookie和session 及Web相关工具
Cookie和session 及Web相关工具
|
26天前
|
存储 前端开发 Java
JavaWeb基础7——会话技术Cookie&Session
会话技术、Cookie的发送和获取、存活时间、Session钝化与活化、销毁、用户登录注册“记住我”和“验证码”案例
JavaWeb基础7——会话技术Cookie&Session
|
2月前
|
存储 安全 搜索推荐
【JavaWeb 秘籍】Cookie vs Session:揭秘 Web 会话管理的奥秘与实战指南!
【8月更文挑战第24天】本文以问答形式深入探讨了Web开发中关键的会话管理技术——Cookie与Session。首先解释了两者的基本概念及工作原理,随后对比分析了它们在存储位置、安全性及容量上的差异。接着,通过示例代码详细介绍了如何在JavaWeb环境中实现Cookie与Session的操作,包括创建与读取过程。最后,针对不同应用场景提供了选择使用Cookie或Session的指导建议,并提出了保障二者安全性的措施。阅读本文可帮助开发者更好地理解并应用这两种技术。
40 1
|
2月前
|
网络协议 API 开发者
Python中的会话管理:requests.Session深度解析
Python中的会话管理:requests.Session深度解析
|
2月前
|
存储 安全 搜索推荐
深入探讨Session和Cookie的概念、用途以及如何在Java Web开发中有效地使用它们进行用户状态管理。
在Java Web开发中,Session和Cookie是管理用户状态的核心技术。Session存储于服务器端,通过唯一的Session ID识别用户,确保数据安全与隐私;Cookie则存储于客户端,用于记录用户偏好等信息。两者各有优势:Session适合存储敏感数据,但需合理管理避免资源浪费;Cookie便于持久化存储,但在安全性上需谨慎设置。开发者可通过Servlet API轻松操作二者,实现个性化用户体验与应用性能优化。
40 2
|
2月前
|
存储 JSON JavaScript
震撼!Cookie、Session、Token、JWT 终极对决:揭开 Web 认证的神秘面纱!
【8月更文挑战第13天】Web 开发中,Cookie、Session、Token 和 JWT 常混淆。Cookie 是服务器给客户端的小信息片,如登录状态,每次请求都会返回。Session 则是服务器存储的用户数据,通过 Session ID 追踪。Token 类似通行证,证明客户端身份且可加密。JWT 是结构化的 Token,含头部、载荷及签名,确保数据完整性和安全性。
45 4
|
2月前
|
存储 前端开发 JavaScript
揭秘!JavaScript本地存储的四大绝技:从Cookie到IndexedDB,让你的Web应用秒变数据存储高手,轻松应对各种挑战!
【8月更文挑战第4天】JavaScript为核心前端技术,提供多样本地存储方案以优化用户体验与减少服务器负载。首先,Cookie虽用于基本数据如登录状态,但受大小限制及安全性影响。接着,Web Storage中的LocalStorage持久存储不变数据,SessionStorage则限于单次会话。更进一步,IndexedDB作为全面数据库解决方案,支持复杂数据操作但使用较复杂。每种方式根据应用需求各有优势。
47 9