首页 > 代码库 > 第二百六十九节,Tornado框架-Session登录判断

第二百六十九节,Tornado框架-Session登录判断

Tornado框架-Session登录判断

 

Session需要结合cookie来实现

Session的理解

  1、用户登录系统时,服务器端获取系统当前时间,进行nd5加密,得到加密后的密串

  2、将密串作为一个字典的键,值为一个字典,也就是嵌套字典,键为密串的字典里保存用户信息

  3、将这个密串当做cookie值写入浏览器

  4、当用户访问时,判断值为密串的cookie是否存在,如果存在,获取cookie的值也就是密串,将这个密串在服务端的字典里查找是否存在,如果存在就可以拿到用户保存的各种信息,判断用户是否是登录状态

技术分享

 

 

框架引擎

#!/usr/bin/env python
#coding:utf-8

import tornado.ioloop
import tornado.web                              #导入tornado模块下的web文件


container = {}                                  #用户登录信息字典,保存着用户的登录信息,{‘328eb994f73b89c5f1de57742be1ee82‘: {‘is_login‘: True, ‘mim‘: ‘admin‘, ‘yhm‘: ‘admin‘}}

class indexHandler(tornado.web.RequestHandler):  #定义一个类,继承tornado.web下的RequestHandler类
    def get(self):                                              #get()方法,接收get方式请求
        hq_cookie = self.get_cookie(xr_cookie)                #获取浏览器cookie
        session = container.get(hq_cookie,None)                 #将获取到的cookie值作为下标,在数据字典里找到对应的用户信息字典
        if not session:                                         #判断用户信息不存在
            self.redirect("/dlu")  # 显示登录html文件            #跳转到登录页面
        else:
            if session.get(is_login,None) == True:            #否则判断用户信息字典里的下标is_login是否等于True
                self.render("index.html")  # 显示index.html文件  #显示查看页面
            else:
                self.redirect("/dlu")                           #跳转登录页面

class dluHandler(tornado.web.RequestHandler):
    def get(self):
        hq_cookie = self.get_cookie(xr_cookie)                #获取浏览器cookie
        session = container.get(hq_cookie,None)                 #将获取到的cookie值作为下标,在数据字典里找到对应的用户信息字典
        if not session:                                         #判断用户信息不存在
            self.render("dlu.html")  # 显示登录html文件          #打开到登录页面
        else:
            if session.get(is_login,None) == True:            #否则判断用户信息字典里的下标is_login是否等于True
                self.redirect("/index")  # 显示index.html文件    #跳转查看页面
            else:
                self.redirect("/dlu")                           #跳转登录页面

    def post(self):
        yhm = self.get_argument(yhm)                          #接收用户输入的登录账号
        mim = self.get_argument(mim)                          #接收用户输入的登录密码
        if yhm == admin and mim == admin:                   #判断用户的密码和账号
            import hashlib                                      #导入md5加密模块
            import time                                         #导入时间模块
            obj = hashlib.md5()                                 #创建md5加密对象
            obj.update(bytes(str(time.time()),encoding = "utf-8"))  #获取系统当前时间,传入到md5加密对象里加密
            suijishu = obj.hexdigest()                              #获取加密后的密串
            container[suijishu] = {}                                #将密串作为下标到container字典里,创建一个新空字典
            container[suijishu][yhm] = yhm                        #字典里的键为yhm,值为用户名
            container[suijishu][mim] = mim                        #字典里的键为mim,值为用户密码
            container[suijishu][is_login] = True                  #字典里的键为is_login,值为True
            self.set_cookie(xr_cookie,suijishu,expires_days=1)    #将密串作为cookie值写入浏览器
            self.redirect("/index")                                 #跳转到查看页面
        else:
            self.redirect("/dlu")

settings = {                                        #html文件归类配置,设置一个字典
    "template_path":"views",                     #键为template_path固定的,值为要存放HTML的文件夹名称
    "static_path":"statics",                         #键为static_path固定的,值为要存放js和css的文件夹名称
    "cookie_secret":"61oETzKXQAGaYdkL5gEmGeJJY",
}

#路由映射
application = tornado.web.Application([         #创建一个变量等于tornado.web下的Application方法
    (r"/index", indexHandler),                   #判断用户请求路径后缀是否匹配字符串index,如果匹配执行MainHandler方法
    (r"/dlu", dluHandler),
],**settings)                                   #将html文件归类配置字典,写在路由映射的第二个参数里

if __name__ == "__main__":
    #内部socket运行起来
    application.listen(8888)                    #设置端口
    tornado.ioloop.IOLoop.instance().start()

 

第二百六十九节,Tornado框架-Session登录判断