hsk*_*k81 8 python session sessionid session-cookies flask
我有一个Flask
应用程序,使用Nginx + WSGI(FastCGI和Gevent)并使用标准的Flask会话.我不使用session.permanent=True
或任何其他额外选项,只需设置SECRET_KEY
默认配置.
我不会在会话中保存任何(键,值)对,并且只依赖该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']
Run Code Online (Sandbox Code Playgroud)
我做了以下观察:
SIDs
- 这是预期的;SIDs
- 预期;SID
也一样- 也是预期的;现在,第(3)点很有意思,因为即使删除相应的cookie也SID
保持不变!在某种程度上,即使这可能是可以理解的,但实际上我期望SID
在不同的cookie之间进行更改.但我看到的唯一区别是
session.new is True
Run Code Online (Sandbox Code Playgroud)
对于第一个 cookie的删除后,立即请求.即使这是非常期待的; 但鉴于这些事实,我面临以下问题:
这是否意味着对于坐在同一 IP 后面的不同用户(使用相同的浏览器配置),我的后端会将它们误认为是同一个用户?
如果不是第(1)点,那么这些"粘性"会话的当前行为实际上非常令人愉快,因为这避免了我的用户可能因为删除了相应的cookie而丢失数据的情况.
他们仍然可以通过使用相同的浏览器从同一网络重新访问该站点来节省时间.我喜欢这样,但只有在第(1)点不是这样的情况下.
我假设第(1)点实际上会咬我,结论实际上是保存token
在会话中并因此接受用户可以通过简单地删除他的cookie来打击自己的命运?
或者有没有办法告诉每个新鲜的饼干Flask
给出不同SIDs
的?
实际上,这个问题引起了我的问题,因为我使用了一个负载影响服务,它模拟了不同的用户(在同一个IP上),但我的后端一直将它们视为单个用户,因为相应SIDs
的都是相同的.
该应用程序可在http://webed.blackhan.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()
Run Code Online (Sandbox Code Playgroud)
它基本上就是这样md5(ip_address + user_agent)
.
Flask使用Werkzeug的安全cookie来存储此标识符.安全cookie(顾名思义)是安全的:
此模块实现了一个不可从客户端更改的cookie,因为它添加了服务器检查的校验和.如果您拥有的只是用户ID或标记登录用户的内容,则可以将其用作会话替换.
归档时间: |
|
查看次数: |
2506 次 |
最近记录: |