zoukankan      html  css  js  c++  java
  • tornado session

    [转]tornado入门 - session
    cookie 和session 的区别:

    1、cookie数据存放在客户的浏览器上,session数据放在服务器上。

    2、cookie不是很安全,别人可以分析存放在本地的COOKIE并进行COOKIE欺骗
    考虑到安全应当使用session。

    3、session会在一定时间内保存在服务器上。当访问增多,会比较占用你服务器的性能
    考虑到减轻服务器性能方面,应当使用COOKIE。

    4、单个cookie保存的数据不能超过4K,很多浏览器都限制一个站点最多保存20个cookie。

    5、所以个人建议:
    将登陆信息等重要信息存放为SESSION
    其他信息如果需要保留,可以放在COOKIE中

    创建唯一标识符

    import uuid
    uuid.uuid4()
    

    tornado默认没有支持session

    需要安装第三方

    安装Redis 和 pycket

    pip install pycket


    使用pycket实现基于redis的session

    例子

    #-*- coding: utf-8 -*-  
      
    import tornado.httpserver  
    import tornado.ioloop  
    import tornado.web  
    import os  
    import tornado.autoreload  
      
    from tornado.options import define, options  
    #2 导入模块  
    from pycket.session import SessionMixin  
      
      
    define('port', default=8000, help='Run on the given port', type=int)  
    define('debug', default=False, help='Set debug mode', type=bool)  
      
      
    class HomeHandler(tornado.web.RequestHandler):  
        def get(self, *args, **kwargs):  
            self.render('index.html')  
      
    #3 在使用session的handler上继承SessionMixin  
    class LoginHandler(tornado.web.RequestHandler, SessionMixin):  
        def get(self, *args, **kwargs):  
            self.render('login.html')  
        def post(self, *args, **kwargs):  
            self.set_secure_cookie('user', self.get_argument('user', None))  
            #4设置session  
            self.session.set('user_session_test', self.get_argument('user'))  
      
            txt = str(self.session.get('user_session_test'))  
            #4测试session  
            self.write('Successully set cookie!, user_session_test value: %s' % txt)  
      
      
    class OtherHtmlHandler(tornado.web.RequestHandler):  
        def get_current_user(self):  
            user = self.get_secure_cookie('user')  
            return user  
        @tornado.web.authenticated  
        def get(self, page):  
            pagename = page + '.html'  
            path = os.path.join(self.settings['static_path'], pagename)  
            self.render(pagename)  
      
      
      
      
    class CustomApp(tornado.web.Application):  
        def __init__(self, debug = False):  
            settings = {  
                'template_path':os.path.join(os.path.dirname(__file__), 'moban_clean/templates'),  
                'static_path':os.path.join(os.path.dirname(__file__), 'moban_clean'),  
                'blog_title': "tornado blog",  
                'login_url': '/login.html',  
                'cookie_secret':"2379874hsdhf0234990sdhsaiuofyasop977djdj",  
                'xsrf_cookies':True,  
                'debug':debug,  
                #1 配置pycket 注意别忘记开启redis服务C:
    edis>redis-server.exe  
                'pycket':{  
                    'engine':'redis',  
                    'storage':{  
                        'host':'localhost',  
                        'port': 6379,  
                        'db_sessions':10,  
                        'db_notifications':11,  
                        'max_connections':2**31,  
                    },  
                    'cookies':{  
                        #5 设置过期时间  
                        'expires_days':2,  
                        #'expires':None, #秒  
                    },  
                }  
            }  
            handles = [  
                (r'/$', HomeHandler),  
                (r'/login.html', LoginHandler),  
                (r'/(.+?).html', OtherHtmlHandler),  
                (r'/(.+?..+)', tornado.web.StaticFileHandler, dict(path=settings['static_path'])),  
      
            ]  
      
            super(CustomApp, self).__init__(handles, **settings)  
      
    if __name__ == '__main__':  
        tornado.options.parse_command_line()  
      
        app = CustomApp(debug=options.debug)  
        http_server = tornado.httpserver.HTTPServer(app)  
        http_server.listen(options.port)  
        #tornado.autoreload.start()  
        tornado.ioloop.IOLoop.instance().start()  
    
  • 相关阅读:
    PHP数字签名算法
    PHP日期相关类
    浏览器常见bug及解决办法
    PHPer整理的前端开发知识
    小程序之轮播图(2020.4.13更新)
    Android APK反编译 apktool使用教程
    秒懂-单列布局水平居中布局
    一句话搞定-phpStudy安装yaf扩展
    Git的简单安装
    人人都能读懂的css3 3d小demo
  • 原文地址:https://www.cnblogs.com/wancy86/p/6234859.html
Copyright © 2011-2022 走看看