Google app engine GAE webapp2会话:创建和检查会话的正确过程
我试图实现GAE的webapp2会话,但似乎很少有关于它的文档。根据,我的步骤如下: 1.配置并将配置添加到主应用程序:Google app engine GAE webapp2会话:创建和检查会话的正确过程,google-app-engine,session,webapp2,Google App Engine,Session,Webapp2,我试图实现GAE的webapp2会话,但似乎很少有关于它的文档。根据,我的步骤如下: 1.配置并将配置添加到主应用程序: config = {} config['webapp2_extras.sessions'] = { 'secret_key': 'my_secret_key', } app = webapp2.WSGIApplication([...], config=config) 2.在登录处理程序中创建会话 # Delete existent session -->
config = {}
config['webapp2_extras.sessions'] = {
'secret_key': 'my_secret_key',
}
app = webapp2.WSGIApplication([...], config=config)
2.在登录处理程序中创建会话
# Delete existent session
--> not mention in the tutorial
# member is found
self.session_store = sessions.get_store(request=handler.request)
self.session['account'] = member.account
3.检查我的程序中的不同位置是否存在会话
if self.session['account']:
# Session exists
4.用户注销时删除会话
--> not mentioned in the tutorial
我的问题是:
谢谢。这里是一个处理程序示例,以及如何使用webapp2额外会话 带有BaseHandler和MainHandler的main.py
import webapp2
from webapp2_extras import sessions
class BaseHandler(webapp2.RequestHandler): # taken from the webapp2 extrta session example
def dispatch(self): # override dispatch
# Get a session store for this request.
self.session_store = sessions.get_store(request=self.request)
try:
# Dispatch the request.
webapp2.RequestHandler.dispatch(self) # dispatch the main handler
finally:
# Save all sessions.
self.session_store.save_sessions(self.response)
@webapp2.cached_property
def session(self):
# Returns a session using the default cookie key.
return self.session_store.get_session()
class YourMainHandler(BaseHandler):
def get(self):
....
self.session['foo'] = 'bar'
def post(self):
foo = self.session.get('foo')
如果您有单独的login.py:
.... other imports
import main
class Login(main.BaseHandler):
def get(self):
....
self.session['foo'] = 'bar'
def post(self):
foo = self.session.get('foo')
这可能不是对这个问题的直接回答,但这是我用gaesessions而不是GAE的webapp2会话找到的解决方案,我想与大家分享。我们开始:
from gaesessions import get_current_session
session = get_current_session()
if session.is_active():
session.terminate()
# start a session for the user (old one was terminated)
session['account'] = account
from gaesessions import get_current_session
def checkSession():
session = get_current_session()
if session.is_active():
return session['account']
return False
def logout():
session = get_current_session()
if session.is_active():
session.terminate()
- description: daily session cleanup
url: /clean_up_sessions
schedule: every day 3:00
timezone: ... (Your time zone)
功能:
from gaesessions import delete_expired_sessions
class clean_up_sessions(webapp2.RequestHandler):
def get(self):
while not delete_expired_sessions():
pass
希望这有帮助。在您的
请求处理程序中
覆盖调度
:
从webapp2_附加导入会话
def dispatch(self):
self.session_store = sessions.get_store(request=self.request)
try:
webapp2.RequestHandler.dispatch(self)
finally:
self.session_store.save_sessions(self.response)
并创建一个名为会话的webapp2.cached_属性
:
@webapp2.cached_property
def session(self):
return self.session_store.get_session(backend="<whatever you want here>")
这将负责清除旧会话并为您创建新会话,或者:
self.auth.set_session(self.auth.store.user_to_dict(self.user), remember=True)
至于注销,您只需拨打以下电话:
self.auth.unset_session()
非常感谢你的帮助。我还在挣扎,但运气不好。假设我有一个模块“login.py”,其中包含类login(webapp2.RequestHandler),用于处理用户登录。还有一个主模块“main.py”,其中包含MainPage类(BaseHandler)。如何更改登录类?我在login.py中导入main,并将类login(webapp2.RequestHandler)更改为login(main.BaseHandler)。错误消息:“module”对象没有属性“BaseHandler”,这就是我所说的:错误消息:“module”对象没有属性“BaseHandler”。在检查用户是否存在时,我实际上不需要会话的用户名。因此,“foo=self.session.get('foo')”似乎不起作用。那我该怎么做呢?此外,如何删除用户的会话(也不知道用户名)?谢谢你的日志。我建议你学习课程和webapp2。最后一点提示:当用户结束会话时,不要写入/保存会话并删除会话cookie。关于basehandler问题,建议您在获得更多专业知识之前,将所有内容保留在同一个文件中。为什么使用gae会话而不是webapp2_extras.sessions?gae sessions将自己与一些会话系统进行比较,但与webapp2的会话不同。非常感谢,Romz。我不知道有webapp2_额外会话。我将尝试一下。在我的应用程序中,auth在数据存储中创建一个独特的模型,它在和UserToken中保存一个密钥,当用户更改密码并注销时,他无法再次登录什么是self.auth
?似乎self.auth
来自
self.auth.set_session(self.auth.store.user_to_dict(self.user), remember=True)
self.auth.unset_session()