当前位置: 首页 > news >正文

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

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模板引擎,简直易如反掌。

 

转载于:https://www.cnblogs.com/hi-nginx/p/8667802.html

相关文章:

  • hostPath Volume - 每天5分钟玩转 Docker 容器技术(148)
  • 使用vigil 监控微服务系统包含可视化界面
  • Centos查看端口占用情况和开启端口命令
  • 分布式计算框架MapReduce
  • php新特性:trait 关键字使用
  • BZOJ2938:[POI2000]病毒(AC自动机)
  • MaxCompute访问TableStore(OTS) 数据
  • 并发之痛 Thread,Goroutine,Actor
  • qca wlan wifi modules解析二
  • 结合 Laravel 初步学习 GraphQL
  • 实验三 类与对象(zxt)
  • 翻译:DECLARE HANDLER语句(已提交到MariaDB官方手册)
  • 窥探Node.js里的Stream
  • 给mybatis添加自动建表,自动加字段的功能
  • 如何夯实(Java)编程基础,并深入学习和提高
  • [ JavaScript ] 数据结构与算法 —— 链表
  • [译]如何构建服务器端web组件,为何要构建?
  • 【跃迁之路】【699天】程序员高效学习方法论探索系列(实验阶段456-2019.1.19)...
  • Angular4 模板式表单用法以及验证
  • Electron入门介绍
  • ESLint简单操作
  • Facebook AccountKit 接入的坑点
  • RedisSerializer之JdkSerializationRedisSerializer分析
  • Redis学习笔记 - pipline(流水线、管道)
  • session共享问题解决方案
  • Vue实战(四)登录/注册页的实现
  • Yii源码解读-服务定位器(Service Locator)
  • 大型网站性能监测、分析与优化常见问题QA
  • 工程优化暨babel升级小记
  • 解决jsp引用其他项目时出现的 cannot be resolved to a type错误
  • 名企6年Java程序员的工作总结,写给在迷茫中的你!
  • 软件开发学习的5大技巧,你知道吗?
  • 限制Java线程池运行线程以及等待线程数量的策略
  • 小程序开发中的那些坑
  • 原生js练习题---第五课
  • 最近的计划
  • MiKTeX could not find the script engine ‘perl.exe‘ which is required to execute ‘latexmk‘.
  • 3月27日云栖精选夜读 | 从 “城市大脑”实践,瞭望未来城市源起 ...
  • ​ ​Redis(五)主从复制:主从模式介绍、配置、拓扑(一主一从结构、一主多从结构、树形主从结构)、原理(复制过程、​​​​​​​数据同步psync)、总结
  • ​LeetCode解法汇总2304. 网格中的最小路径代价
  • (10)ATF MMU转换表
  • (编程语言界的丐帮 C#).NET MD5 HASH 哈希 加密 与JAVA 互通
  • (二)斐波那契Fabonacci函数
  • (附源码)node.js知识分享网站 毕业设计 202038
  • (附源码)ssm航空客运订票系统 毕业设计 141612
  • (五)大数据实战——使用模板虚拟机实现hadoop集群虚拟机克隆及网络相关配置
  • (一)80c52学习之旅-起始篇
  • (原)Matlab的svmtrain和svmclassify
  • .360、.halo勒索病毒的最新威胁:如何恢复您的数据?
  • .NET 6 Mysql Canal (CDC 增量同步,捕获变更数据) 案例版
  • .net core 3.0 linux,.NET Core 3.0 的新增功能
  • .net core 微服务_.NET Core 3.0中用 Code-First 方式创建 gRPC 服务与客户端
  • .Net Winform开发笔记(一)
  • .NET/C# 使窗口永不激活(No Activate 永不获得焦点)
  • .net开发时的诡异问题,button的onclick事件无效