MongoDB中的Tornado(Python)存储会话

MongoDB中的Tornado(Python)存储会话,python,mongodb,session,tornado,Python,Mongodb,Session,Tornado,我不熟悉Python和MongoDB环境。我正在用Python和Tornado+MongoDB实现一个小应用程序。我想在mongoDB中存储会话 在server.py中 import os import tornado.web import tornado.ioloop import settings application = tornado.web.Application( settings.urls, my_template_path, my_static_path ) i

我不熟悉Python和MongoDB环境。我正在用Python和Tornado+MongoDB实现一个小应用程序。我想在mongoDB中存储会话

server.py中

import os
import tornado.web 
import tornado.ioloop
import settings

application = tornado.web.Application(
  settings.urls,
  my_template_path,
  my_static_path
)
if __nam__ == '__main__':
  application.listen(8000)
  tornado.ioloop.IOLoop.instance().start()
import handler as H

urls = [
  (r"/",          H.ShowHome),
  (r"/login",     H.ShowLogin),
  (r"/dashboard", H.ShowDashboard)
]
import os
# import session or some library ????

class ShowHome(tornado.web.RequestHandler):
  SESSION = False
  def initialize(self):
     #
     # check session related things here 
     #
     # self.SESSION = True or False based on session cookie 

  def get(self):
    if not self.SESSION:
       self.redirect('/login')
    else:
       self.render('index.html')

class ShowLogin(tornado.web.RequestHandler):
  SESSION = False
  def initialize(self):
     #
     # check session related things here 
     #
     # self.SESSION = True or False based on session cookie 

  def get(self):
    if self.SESSION:
       self.redirect('/dashboard')
    else:
       self.render('login.html')


class ShowDashboard(tornado.web.RequestHandler):
  SESSION = False
  def initialize(self):
     #
     # check session related things here 
     #
     # self.session = True or False based on session cookie 

  def get(self):
    if not SESSION:
       self.redirect('/login')
    else:
       self.render('dashboard.html')
settings.py中

import os
import tornado.web 
import tornado.ioloop
import settings

application = tornado.web.Application(
  settings.urls,
  my_template_path,
  my_static_path
)
if __nam__ == '__main__':
  application.listen(8000)
  tornado.ioloop.IOLoop.instance().start()
import handler as H

urls = [
  (r"/",          H.ShowHome),
  (r"/login",     H.ShowLogin),
  (r"/dashboard", H.ShowDashboard)
]
import os
# import session or some library ????

class ShowHome(tornado.web.RequestHandler):
  SESSION = False
  def initialize(self):
     #
     # check session related things here 
     #
     # self.SESSION = True or False based on session cookie 

  def get(self):
    if not self.SESSION:
       self.redirect('/login')
    else:
       self.render('index.html')

class ShowLogin(tornado.web.RequestHandler):
  SESSION = False
  def initialize(self):
     #
     # check session related things here 
     #
     # self.SESSION = True or False based on session cookie 

  def get(self):
    if self.SESSION:
       self.redirect('/dashboard')
    else:
       self.render('login.html')


class ShowDashboard(tornado.web.RequestHandler):
  SESSION = False
  def initialize(self):
     #
     # check session related things here 
     #
     # self.session = True or False based on session cookie 

  def get(self):
    if not SESSION:
       self.redirect('/login')
    else:
       self.render('dashboard.html')
handler.py中

import os
import tornado.web 
import tornado.ioloop
import settings

application = tornado.web.Application(
  settings.urls,
  my_template_path,
  my_static_path
)
if __nam__ == '__main__':
  application.listen(8000)
  tornado.ioloop.IOLoop.instance().start()
import handler as H

urls = [
  (r"/",          H.ShowHome),
  (r"/login",     H.ShowLogin),
  (r"/dashboard", H.ShowDashboard)
]
import os
# import session or some library ????

class ShowHome(tornado.web.RequestHandler):
  SESSION = False
  def initialize(self):
     #
     # check session related things here 
     #
     # self.SESSION = True or False based on session cookie 

  def get(self):
    if not self.SESSION:
       self.redirect('/login')
    else:
       self.render('index.html')

class ShowLogin(tornado.web.RequestHandler):
  SESSION = False
  def initialize(self):
     #
     # check session related things here 
     #
     # self.SESSION = True or False based on session cookie 

  def get(self):
    if self.SESSION:
       self.redirect('/dashboard')
    else:
       self.render('login.html')


class ShowDashboard(tornado.web.RequestHandler):
  SESSION = False
  def initialize(self):
     #
     # check session related things here 
     #
     # self.session = True or False based on session cookie 

  def get(self):
    if not SESSION:
       self.redirect('/login')
    else:
       self.render('dashboard.html')

在我要检查会话的处理程序中,如何执行此操作

你的意思是这样的吗

class Base(tornado.web.RequestHandler):
    def get_unique_id(self):
        return self.get_secure_cookie('unique_id')

    def set_unique_id(self, some_value):
        return self.set_secure_cookie('unique_id', some_value)


class ShowLogin(Base):
  def get(self):
    if get_unique_id():
       # Get stuff from Mongo using unique_id
       # mongo calls
       self.redirect('/dashboard')
    else:
       self.render('login.html')


class LoginLogin(Base):
  def post(self):
    self.set_unique_id(some_id)
不过,你们可能不想这么做——若有人登录或退出,就让Tornado来处理


除非您持有大量数据或非常敏感的数据,否则将会话数据放入cookies是正常的(而且更容易)

谢谢@andy,如果我使用Tornados的内置会话处理程序,我如何自定义会话到期和数据格式?我将在会话数据中存储一个JSON字符串,其中包含有关用户的信息以及一些缓存信息,如历史记录和搜索查询。添加过期天数以设置安全cookie调用: