Flask 的 session 问题

2014-05-28 05:27:11 +08:00
 shinerene
在看Flask的文档的时候 对于session很模糊,问题在于:
如果我有一个用户登录,则我将他的user_id存入到session中去,session又是dict的形式,那么我服务器运行时候有那么多的用户登录,session是怎么存储在服务器中的呢?
19123 次点击
所在节点    Python
14 条回复
ryan123
2014-05-28 05:48:11 +08:00
我也是新手, 貌似是在浏览器端的cookie存session id, 然后服务器获取此cookie中的session id.
然后服务器编译后检查是否匹配?
loading
2014-05-28 06:56:50 +08:00
flask会默认存到内存里,你可以杀掉进程,再去看还在不在。如果为了防掉电等需要持久化,可以存到各种数据库!


客户端是浏览器存到cookie里,这个用什么都是这里,。
Ever
2014-05-28 07:34:34 +08:00
flask用的secure cookie方式保存session, 即session数据是加密后保存在用户cookie里.
lovesky
2014-05-28 08:09:02 +08:00
@Ever 不一定,这个可以自由选择。
loading
2014-05-28 08:27:10 +08:00
Ever
2014-05-28 08:44:05 +08:00
@lovesky 我觉得自由选择用着不太合适, 毕竟secure cookie是flask唯一自带的session方案, 但是flask确实留了接口, 自由实现较妥。

@loading 和这不冲突, 只是把原本服务器的backend换成了加密后保存在客户端的cookie. https://github.com/mitsuhiko/flask/blob/master/flask/sessions.py
secure cookie方案rails用得比较早, 你留心下github和twitter就发现他们的cookie里有个_xx_sess字段, 就是通过secret key加密后base64过的session.
humiaozuzu
2014-05-28 09:06:39 +08:00
=.= flask 默认的是 client side session,什么意思自己 google 下就明白了。
为了对用户负责,请用 server side session,一般我们都用redis,可以持久化。可以手动也可以用插件
http://flask.pocoo.org/snippets/75/
https://github.com/fengsp/flask-session
clino
2014-05-28 09:11:18 +08:00
看起来uliweb的session比flask的要好啊
https://limodou.github.io/uliweb-doc/zh_CN/session.html
内置好了3种session存储后端的类型,把常用的都覆盖到了
'''
type
表示session存储后端的类型,目前可用的值有:

file 文件系统
database 数据库
redis redis数据库
'''
loading
2014-05-28 09:17:49 +08:00
@Ever 哦,搞错了!我们内部用的是修改过的……

flask的客户端模式真的不安全啊!
shinerene
2014-05-28 15:43:12 +08:00
@humiaozuzu 我也在看Redis,但是关于session的存储我还是有个疑问,就是如果我有100个用户连接着我的服务器,他们都登陆了,那么我的服务器端的session是是如何存储每个人的信息的?是每人一个session,如果是这样那么命名方式是怎样的呢?session1,session2?之后存储在一个内存中的表中么?
humiaozuzu
2014-05-28 15:47:15 +08:00
@shinerene 去 redis 里面看下不就知道格式了
shinerene
2014-05-28 18:06:28 +08:00
@loading 我在Flask里面import的时候 可以import session和import sessions,我看文档的blog的实例中 是import session 请问这两个有什么区别?
loading
2014-05-28 18:18:38 +08:00
@shinerene session引用的是 sessions里的,只有几行!
具体可看代码!

都是 cookie base
shinerene
2014-05-28 19:22:06 +08:00
@loading 看到了 是定义在globals.py这个文件中的

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/114608

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX