编程技术分享平台

网站首页 > 技术教程 正文

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

xnh888 2024-10-17 17:19:56 技术教程 52 ℃ 0 评论

hi-nginx通过redis管理会话。

什么是会话?

在日常生活中,从拨通电话到挂断电话之间的一连串的你问我答的过程就是一个会话。

Cookie是客户端技术,程序把每个用户的数据以cookie的形式写给用户各自的浏览器。

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

第一件开启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

2964628074

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)

Tags:

猜你喜欢

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表