python-如何使用金字塔检查浏览器cookie支持
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了python-如何使用金字塔检查浏览器cookie支持,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含3202字,纯文字阅读大概需要5分钟。
内容图文
![python-如何使用金字塔检查浏览器cookie支持](/upload/InfoBanner/zyjiaocheng/655/9d20723683624bf1bc6d17bb19d6e41e.jpg)
我想知道什么时候才是合适的时机,以及如何检查浏览器cookie的支持.
我知道我必须检查下一个请求,例如,用烧杯,查找会话密钥_creation_time或request.headers [‘Cookie’] …并引发异常(如果找不到),但我不想这样做或类似的要求.我的应用程序的某些部分不需要Cookie,例如主页或信息,常见问题页面…
当用户注销时,会话将被删除或无效,并且我曾经重定向到主视图,如果那时候检查会话密钥,我将找不到它,但这并不意味着存在此问题.
我在登录视图开始时使用的一个示例:
try: request.headers['Cookie']
except KeyError:
return HTTPFound(location=request.route_url('home'))
另请注意,如果我尝试使用request.session.flash(msg,’error’)打印错误消息,或者在主视图的开头再次使用该代码段,并使用控件返回变量使用模板呈现消息,注销后将显示错误.
我正在寻找解决问题的最优雅方法…也许订阅了一个事件?…写下一个在感兴趣的视图中调用的函数?
解决方法:
有些事情可能会导致您的问题.
在继续之前… FYI Pyramid使用WebOb处理请求和响应对象
> WebOb Overview
> WebOb Class Documentation
场景1
如果您在Pyramid下调用set_cookie,然后进行重定向,则不会发送set_cookie.这是因为重定向会创建一个新的响应对象.
有几种解决方法:
>最直接的方法是在引发/返回重定向时将响应标头复制到cookie中
return HTTPfound( "/path/to/redirect", headers=[ (k,v) for (k,v)in self.request.response.headers.iteritems() if k == 'Set-Cookie'] )
要么
resp = HTTPFound(location='/path/to/redirect')
return self.request.response.merge_cookies(resp)
我还要注意,MOST浏览器在重定向上接受cookie,但是Safari不能.
>另一种方法是使用金字塔的钩子在后台转换cookie.我写了使这个自动化的订户.他们在pypi和github上. https://github.com/jvanasco/pyramid_subscribers_cookiexfer
方案2
在金字塔中有两种处理会话的方法. Pyramid有其自己的会话库,然后有Beaker,它为Pylons处理了sessions,并具有许多人使用的Pyramid支持.我不能说pyramid.session,但是Beaker有两种杀死会话的方式:
delete()
Delete the cookie, and clear the session
invalidate()
Clear the contents and start a new session
如果调用invalidate(),则Beaker会话cookie保持不变,并且所有会话数据均被清除-因此您可以开始将新数据存储到空会话对象中.
如果调用delete(),则cookie和会话数据都会被杀死.如果您将新信息放入会话IIRC中,它将进入新的sessionid / cookie中.但是,正如我在上面的第一部分中指出的那样,set_cookie将被调用,但在重定向过程中将被丢弃.因此,如果您删除()会话,然后不迁移set_cookie标头,则客户端将永远不会收到会话标识符.
金字塔下Cookie的一些示例行为
重定向行为
>用户访问网站并获得Cookie:SessionId = 1
>用户点击登录
>应用程序将登录状态保存到会话“ 1”
>应用使用“ LoggedIn = 1”调用set_cookie
>应用程序调用重定向到/ home
>重定向发送,没有cookie
>用户登陆到/ home
>应用仅看到“ SessionId = 1”的Cookie
带有重定向的删除行为:
>用户点击注销
>应用程序在会话上调用“ delete()”,终止数据存储并将set_cookie放入request.response中以使旧的cookie过期.如果创建了新的sessionid,也将发送它.
>如果应用提供响应,则客户端会收到Cookie
>如果应用重定向,则客户端不会收到标头以使Cookie过期或设置新的标头
带有重定向无效的行为:
>用户点击注销
>应用程序在会话上调用“ invalidate()”,从而杀死了数据存储区
>应用设置了自定义的“ loggedout = 0” cookie
>如果应用提供响应,则客户端会收到Cookie
>如果应用重定向:
>客户端未收到“ loggedout = 0”标头
>客户端仍然具有旧的会话cookie,但是在后端无效/清除了该cookie,因此实际上已将它们锁定.
旁注:我个人不喜欢使用request.headers接口(处理所有标头)来获取Cookie.我对request.cookies更好了-它返回了一个cookie字典.
内容总结
以上是互联网集市为您收集整理的python-如何使用金字塔检查浏览器cookie支持全部内容,希望文章能够帮你解决python-如何使用金字塔检查浏览器cookie支持所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。