常量 Flask 会话 ID

2024-03-14

I've a Flask应用程序,使用 Nginx+WSGI(FastCGI 和 Gevent)提供服务并使用标准 Flask 会话。我愿意not使用session.permanent=True或任何其他额外选项,但只需设置SECRET_KEY在默认配置中。

I do not保存会话中的任何(键,值)对,并且仅依赖于SID = session['_id']用于识别回访用户的条目。我使用以下代码读取SID:

@page.route ('/')
def main (page='home', template='index.html'):

    if not request.args.get ('silent', False):
        print >> sys.stderr, "Session ID: %r" % session['_id']

我做了以下观察:

  1. 对于相同的IP地址,但不同的浏览器,我得到不同的结果SIDs- 这是预期的;
  2. 对于同一浏览器中的不同IP,我再次有不同的SIDs- 预期的;
  3. 对于相同的 IP 地址和相同的浏览器,我得到相同的结果SID- 也是预期的;

现在,第 (3) 点很有趣,因为即使delete对应的cookieSID遗迹constant!在某种程度上,这也许是可以理解的,但实际上我期待着SID在不同的 cookie 之间进行更改。但我看到的唯一区别是

session.new is True

for the first删除cookie后立即请求。即便如此,这也是人们非常期待的。但考虑到这些事实,我面临以下问题:

  1. 这是否意味着对于不同的坐在后面的用户sameIP(具有相同的浏览器配置)我的后端会将它们误认为是same user?

  2. 如果点(1)是not在这种情况下,这些“粘性”会话的当前行为实际上非常令人愉快,因为这避免了我的用户可能仅仅因为删除了相应的 cookie 而丢失数据的情况。

    他们仍然可以通过使用相同的浏览器从同一网络重新访问该网站来挽救局面。我喜欢这样,但只是if点(1)是not案子。

  3. 我假设第(1)点实际上会咬我,结论实际上是为了拯救一个token并因此接受用户可以通过简单地删除他的 cookie 来引爆自己的命运?

  4. 或者有什么办法可以告诉Flask给予不同的SIDs每块新鲜饼干?

实际上,这个问题是因为我使用了负载影响服务而引起的,该服务正在模拟不同的用户(在同一 IP 上),但我的后端一直将他们视为单个用户,因为相应的SIDs都是一样的。

该应用程序可用于测试http://webed.blackhan.ch http://webed.blackhan.ch(释放后将移动https://notex.ch https://notex.ch[基于浏览器的文本编辑器])。谢谢您的回答。


您似乎正在使用 Flask-Login 扩展。这是生成 id 令牌的代码:

def _create_identifier():
    base = unicode("%s|%s" % (request.remote_addr,
                              request.headers.get("User-Agent")), 'utf8', errors='replace')
    hsh = md5()
    hsh.update(base.encode("utf8"))
    return hsh.digest()

基本上只是md5(ip_address + user_agent).

烧瓶用途Werkzeug 的安全 cookie http://werkzeug.pocoo.org/docs/contrib/securecookie/来存储这个标识符。安全 cookie(顾名思义)是安全的:

该模块实现了客户端无法更改的 cookie,因为它添加了服务器检查的校验和。如果您拥有的只是用户 ID 或用于标记登录用户的内容,则可以将其用作会话替换。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

常量 Flask 会话 ID 的相关文章

随机推荐