我有一个Flask
应用程序,使用 Nginx+WSGI (FastCGI & Gevent) 并使用标准的 Flask 会话。我不使用session.permanent=True
或任何其他额外选项,而只是SECRET_KEY
在默认配置中设置。
我不在会话中保存任何 (key,value) 对,并且仅依靠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']
我做了以下观察:
- 对于相同的 IP 地址,但不同的浏览器我得到不同
SIDs
的 - 这是预期的; - 对于不同的 IP 和相同的浏览器,我再次有不同的
SIDs
- 预期的; - 对于具有相同浏览器的相同 IP 地址,我得到相同的
SID
- 也是预期的;
现在,第 (3) 点很有趣,因为即使删除了相应的 cookie,它SID
仍然保持不变!在某种程度上,这可能是可以理解的,但实际上我希望SID
在不同的 cookie 之间发生变化。但我看到的唯一区别是
session.new is True
删除 cookie 后的第一个请求。即使这是非常值得期待的。但鉴于这些事实,我面临以下问题:
这是否意味着对于坐在同一IP 后面(具有相同浏览器配置)的不同用户,我的后端会将他们误认为是同一用户?
如果不是第 (1) 点,那么这些“粘性”会话的当前行为实际上是非常令人愉快的,因为这避免了我的用户可能因为删除了相应的 cookie 而丢失数据的情况。
他们仍然可以通过使用同一浏览器从同一网络重新访问该站点来节省时间。我喜欢这样,但前提是第 (1) 点不是这种情况。
我假设第 (1) 点实际上会咬我,结论实际上是
token
在会话中保存 a 并因此接受用户可以通过简单地删除他的 cookie 来炸毁自己的命运吗?或者有没有办法告诉每个新鲜饼干
Flask
不同?SIDs
实际上,这个问题是因为我使用了负载影响服务,它模拟了不同的用户(在同一个 IP 上),但我的后端一直将它们视为单个用户,因为对应SIDs
的都是相同的。
该应用程序可在http://webed.blackhan.ch进行测试(在发布时将移动https://notex.ch [基于浏览器的文本编辑器])。谢谢您的回答。