我们的Django应用程序具有以下会话管理要求.
在阅读了文档,Django代码和一些与此相关的博客文章后,我提出了以下实现方法.
要求1
通过将SESSION_EXPIRE_AT_BROWSER_CLOSE设置为True,可以轻松实现此要求.
要求2
我已经看到一些建议使用SESSION_COOKIE_AGE来设置会话到期时间.但是这种方法存在以下问题.
即使用户正在使用该应用程序,该会话也始终在SESSION_COOKIE_AGE结束时到期.(这可以通过使用自定义中间件在每个请求上将会话到期设置为SESSION_COOKIE_AGE来防止,或者通过将SESSION_SAVE_EVERY_REQUEST设置为true来保存每个请求的会话.但是由于使用了SESSION_COOKIE_AGE,下一个问题是不可避免的.)
由于cookie的工作方式,SESSION_EXPIRE_AT_BROWSER_CLOSE和SESSION_COOKIE_AGE是互斥的,即cookie在浏览器关闭或指定的到期时间到期.如果使用SESSION_COOKIE_AGE并且用户在cookie过期之前关闭浏览器,则会保留cookie并重新打开浏览器将允许用户(或任何其他人)进入系统而无需重新进行身份验证.
Django仅依赖于存在的cookie来确定会话是否处于活动状态.它不会检查与会话一起存储的会话到期日期.
可以使用以下方法来实现此要求并解决上述问题.
要求3
当我们检测到会话已过期时(在上面的自定义SessionMiddleware中),在请求上设置一个属性以指示会话到期.此属性可用于向用户显示适当的消息.
要求4
使用JavaScript检测用户不活动,提供警告以及扩展会话的选项.如果用户希望扩展,则向服务器发送保持活动脉冲以扩展会话.
要求5
使用JavaScript检测用户活动(在长期业务操作期间)并向服务器发送保持活动脉冲以防止会话过期.
上面的实现方法似乎很精细,我想知道是否有一个更简单的方法(特别是对于要求2).
任何见解都将受到高度赞赏.
我在Sketch示例AppKit应用程序(在/ Developer/Examples/AppKit/Sketch中找到)中将类定义为模型或视图时有点困惑.SKTRectangle,SKTCircle等类被认为是Model类,但它们具有绘图代码.
我的印象是模型应该没有任何视图/绘图代码.
有人可以澄清一下吗?
谢谢.
Django应用程序具有自己的功能和设计.如果您的要求与contib应用程序的功能不完全匹配,则最终会自定义和调整应用程序.我觉得这比仅仅构建自己的应用程序以满足您的需求需要更多的努力.
你怎么看?