session

session也是用来保存信息的。如果当前登陆的用户要保存很多信息的话,密码,邮箱等等,则浏览器上的cookie就会很多。来回交互的时候是发送网络请求的,这个来回交互的时候是要消耗网络流量的。用户名、密码以及账户信息了都放在浏览器端也是不安全的。所以需要有一种办法,能不能给浏览器端只发一段cookie,而这段cookie就代表了用户名、密码以及账户信息等。

注意默认情况下tornado是没有session的。但是默认支持session。自己写session,客户端与浏览器间进行交互的时候,只想写一段cookie,这段cookie可以保存很多值。在服务器端保存一个大字典,大字典可以嵌套大字典。

假如用户登陆成功以后在内部可以随机生成一个字符串。将这个字符串可以当成cookie,可以给它传到客户端。第二个人登陆,也给它随机生成一个字符串。只要有一个登陆用户,就有一个对应的key和value的对应关系。第一个用户登陆,就把第一个用户的账户信息保存下来。通过字符串的值找到对应的在服务器端保存的值。找到之后,就可以把它取过来。每个用户再登陆过来的时候,只有这么一个字符串就行。所属的信息都保存在服务器端。是比较隐私的。只有那么一段字符串。首先要注意的一点是session保存在服务器端。session如果能应用就要依赖于cookie。

在服务器端定义一个保存session的容器。这个容器可以是全局变量,一点击就代表服务器端运行起来了。此时定义一个container。

IndexHandler->里面有get方法():

在get方法里面,container={},随机字符串对应着第一个用户的所有信息。注意如果登陆成功就是:

container[随机字符串]=[]就是一系列的值。

注意登陆完成以后http请求就断开了。就表示这个函数已经执行完毕了。函数执行完毕里面的局部变量就没有了。所以得搞一个全局变量,将container搞成一个全局变量。就是:

import tornado.ioloop

import tornado.web

container={}

用户登陆成功就可以在container里边加东西了。

container={

  "第一个人的随机字符串":{'k1':111,'parents':''}

}

class IndexHandler (tornado.web.RequestHandler):

  def get(self):

    if self.get_argument('u',None) in ['alex','eric']:

      import hashlib

      import time

      obj=hashlib.md5()

      obj.update(bytes(str(time.time(),encoding='utf-8')))

      random_str=obj.hexdigest()

      container[random_str]={}

      container[random_str]['k1']=123

      container[random_str]['k2']=self.get_argument('u',none)+parents

      container[random_str]['is_login']=True

is_login或者是k1都保存在服务器上了

客户端这个字符串也得写到客户端了

self.set_cookie('iiiiii',random_str)//写上这个表示客户端和服务器端都有了

登陆成功,在访问其它页面的时候就可以做判断了

is_login为True的时候,就表示登陆成功了。

先通过key找到它对应的value,通过这个再找里面的is_login

random_str=self.get_cookie('iiiiiiii')

current_user_info=container.get(random_str,None)

if not current_user_info:

  self.redirect('/index')

else:

  if current_user_info.get('is_login',None):

    temp="%s-%s"%(current_user_info.get('k1',""),current_user_info.get('k2',""))

    self.write(temp)

  else:

 

posted @ 2017-04-03 14:56  关泉珍  阅读(84)  评论(0)    收藏  举报