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:

浙公网安备 33010602011771号