V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐学习书目
Learn Python the Hard Way
Python Sites
PyPI - Python Package Index
http://diveintopython.org/toc/index.html
Pocoo
值得关注的项目
PyPy
Celery
Jinja2
Read the Docs
gevent
pyenv
virtualenv
Stackless Python
Beautiful Soup
结巴中文分词
Green Unicorn
Sentry
Shovel
Pyflakes
pytest
Python 编程
pep8 Checker
Styles
PEP 8
Google Python Style Guide
Code Style from The Hitchhiker's Guide
shinerene
V2EX  ›  Python

Flask 的 session 问题

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


    客户端是浏览器存到cookie里,这个用什么都是这里,。
    Ever
        3
    Ever  
       2014-05-28 07:34:34 +08:00
    flask用的secure cookie方式保存session, 即session数据是加密后保存在用户cookie里.
    lovesky
        4
    lovesky  
       2014-05-28 08:09:02 +08:00
    @Ever 不一定,这个可以自由选择。
    loading
        5
    loading  
       2014-05-28 08:27:10 +08:00 via Android
    Ever
        6
    Ever  
       2014-05-28 08:44:05 +08:00   ❤️ 1
    @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
        7
    humiaozuzu  
       2014-05-28 09:06:39 +08:00   ❤️ 1
    =.= flask 默认的是 client side session,什么意思自己 google 下就明白了。
    为了对用户负责,请用 server side session,一般我们都用redis,可以持久化。可以手动也可以用插件
    http://flask.pocoo.org/snippets/75/
    https://github.com/fengsp/flask-session
    clino
        8
    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
        9
    loading  
       2014-05-28 09:17:49 +08:00 via Android
    @Ever 哦,搞错了!我们内部用的是修改过的……

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

    都是 cookie base
    shinerene
        14
    shinerene  
    OP
       2014-05-28 19:22:06 +08:00
    @loading 看到了 是定义在globals.py这个文件中的
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3571 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 20ms · UTC 04:30 · PVG 12:30 · LAX 20:30 · JFK 23:30
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.