上次我们学到了redis的一些操作,下面来实际运用以下。
这里我们先来学习一下什么是cookie和session。
什么是Cookie
其实简单的说就是当用户通过http协议访问一个服务器的时候,这个服务器会将一些Name/Value键值对返回给客户端浏览器,并将这些数据加上一些限制条件。在条件符合时,这个用户下次再访问服务器的时候,数据又被完整的带给服务器。
因为http是一种无状态协议,用户首次访问web站点的时候,服务器对用户一无所知。而Cookie就像是服务器给每个来访问的用户贴的标签,而这些标签就是对来访问的客户端的独有的身份的一个标识,这里就如同每个人的身份证一样,带着你的个人信息。而当一个客户端第一次连接过来的时候,服务端就会给他打一个标签,这里就如同给你发了一个身份证,当你下次带着这个身份证来的时候,服务器就知道你是谁了。所以Cookie是存在客户端的,这里其实就是在你的浏览器中。
Cookie中包含了一个由名字=值(name=value)这样的信息构成的任意列表,通过Set-Cookie或Set-Cookie2HTTP响应(扩展)首部将其贴到客户端身上。
Cookie的分类
这里Cookie主要分为两种:
会话Cookie:不设置过期时间,保存在浏览器的内存中,关闭浏览器,Cookie便被销毁
普通Cookie:设置了过期时间,保存在硬盘上
关于Session
上面我们知道了Cookie可以让服务器端跟踪每个客户端的访问,但是每次客户端的访问都必须传回这些Cookie,如果Cookie很多,这无形地增加了客户端与服务端的数据传输量,而Session的出现正是为了解决这个问题。
同一个客户端每次和服务端交互时,不需要每次都传回所有的Cookie值,而是只要传回一个ID这个ID是客户端第一次访问服务器的时候生成的,而且每个客户端是唯一的。这样每个客户端就有了一个唯一的ID,客户端只要传回这个ID就行了,这个ID通常是NANE为JSESIONID的一个Cookie。所以Session其实是利用Cookie进行信息处理的。
cookie和session的共同之处在于:cookie和session都是用来跟踪浏览器用户身份的会话方式。
cookie和session的区别是:cookie数据保存在客户端,session数据保存在服务器端。
cookie不是很安全,别人可以分析存放在本地的COOKIE并进行COOKIE欺骗,如果主要考虑到安全应当使用session,当然也没有绝对的安全,只是相对cookie,session更加安全
session会在一定时间内保存在服务器上。当访问增多,会比较占用你服务器的性能,如果主要考虑到减轻服务器性能方面,应当使用COOKIE
cookie和session各有优缺点,所以将登陆信息等重要信息存放为SESSION;其他信息如果需要保留,可以放在COOKIE中。
实例:
先来验证用session登录的程序,分析:
首先先设计一个登录的程序,生成session写入redis,然后设计一个查询程序,传入session进行校验。
第一次登录:从my_user表中验证用户是否存在,用户存在且密码正确的场合生成session(规则:(当前时间戳+username))存入redis。
第二次登录查看:
#1、先验证用户是否登陆,username,session
#2、验证session是否正确,判断和redis里边是否一致
#3、如果一致返回查询结果
#4、如果不一致,提示session非法
# session不存在,则提示用户未登录
# session不一致,登陆失败
#在K-V中传入session
以下是常用工具,放在lib目录的tools文件中:
#常用工具
import pymysql,hashlib,time
import redis
from conf import setting
# #def op_mysql(host,user,passwd,db,sql,port=3306,charset='utf8'):
def op_mysql(sql):
conn=pymysql.connect(host=setting.MYSQL_HOST,user=setting.USER,passwd=setting.PASSWORD,port=setting.PORT,db=setting.DB,charset='utf8')
cur=conn.cursor(cursor=pymysql.cursors.DictCursor)
cur.execute(sql)
sql_start=sql[:6].upper()
if sql_start=='SELECT':#取sql的前6位,判断它是什么类型的语句。
res=cur.fetchall()
else:
conn.commit()
#res='ok'
cur.close()
conn.close()
return res
def op_redis(k,v=None,expired=0,db=0):
#def op_redis(host,passwd,k,v=None,port=6379,db=1):
#r=redis.Redis(host=host,password=passwd,port=port,db=db)
r=redis.Redis(host=setting.REDIS_HOST,password=setting.REDIS_PASSWORD,port=setting.REDIS_PORT,db=db) if v:
r.setex(k,v,expired)
res='ok'
else:
#res=r.get(k).decode()#获取不到的时候返回none,none不能直接进行decode操作
res=r.get(k)
if res:
res=res.decode()
else:
res='none'
return res def md5_password(st:str):#规定传参的类型必须是str类型
#st = hashlib.md5()
bytes_st=st.encode()
m=hashlib.md5(bytes_st)
return m.hexdigest()
#main.py
import flask,time,hashlib
from lib.tools import op_mysql,op_redis,md5_password
import json
server=flask.Flask(__name__)
@server.route('/login',methods=['post'])
def login():
username=flask.request.values.get('name','')
password=flask.request.values.get('passwd','')
sql="select * from my_user where username='%s';"%(username)
if username and password:
if op_mysql(sql):
print(op_mysql(sql))
if password==op_mysql(sql)[0]['passwd']:
session=md5_password(str(time.time())+username)
op_redis('session:%s'%username,session,expired=6000,db=2)
response={'code':200,'msg':'登陆成功','session':session}
else:
response={'code':101,'msg':'密码不正确'}
else:
response={'code':102,'msg':'用户不存在'}
else:
response={'code':103,'msg':'用户名或密码不能为空'}
return json.dumps(response,ensure_ascii=False)
启动服务后,在postman中调用127.0.0.1:8088/login?name=pei&passwd=123456,执行一个正确的用户登录,:
{"msg": "登陆成功", "code": 200, "session": "28b14dea0c7a668650fbb19f6364f482"}
查看到redis里边已经插入了一个session数据:
aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAAAswAAACbCAIAAAD5p1orAAAgAElEQVR4nO3df3Ab14EfcP7ZmU478Y/EsSwlcWzLvMpznc4lN9fJtHN1mrnp3SnTS8e1dEmTNHeuz6fGlmsqdhLJGimOQsdmKIj6QVM/IpKiyEgKSIoEf4EgABKAQIASSQkkCOInQUoKgF3hB0EQAAm8/gEeAwG7iwW4AJbk9zM7GuDh7XtvocXul7uLRUUAAAAAoAgqyj0AAAAA2JoQMgAAAKAoEDIAAACgKBAyAAAAoCgQMgAAAKAo/hgyjv/qJCZMmDDlOwUCAQIAwOSxkFHuwQBAOUWj0fn5+YcPH9I07U8TCARS/64LBoOhUMjr9SJkAAAHhAwAWLPBkEFRlNlsHgMYGzObzRRFlXd9BjFAyACANRsMGWazubzjB1HB+gCk2CEjfn+BvviZ+x++69j7rYcf/L+wdjgZjwveCwAIYoMhY2xsrLzjB1HB+gCkSCEjGV1eHJIv/Pj/WP79SzN/8qVHVy7FnPa5//HXMy89Z//b//ro/Ln4vFuovgBAKAgZICCsD0CKETLoC+cc//nr9w/8Q2zOueJ5SJ2VzPy7rzj/5tXxV77a9/wzv3nqX93Y+YTtP7x8/ycHBekOAISCkAECwvoApICQoVQqq6urOSr0/uluw/PPOP/2m4/OnHzUcPbhhx+4//f+B1U/nv7zV/QvPDvw/Bduvbhj5IUdHa+8wDqmioq8l0O42QG2LbaQQdO0z+ejaRohA/jD+gAk35ChUCj27Nmze/dujjqq//7frux44toz/3bo8/968ov/Zu6v/8uSUr4ovWb9ky/ffXnX0FefbXvuyavPPTn62rdZx4SQAVAOjCGDoiifz/fzn/88PWcgZEBOWB+A5BUyUglj37593CHjzl/+xZ2Xd8mff+bqc0+2PPdk747PjX3lC8YXnu3+0tPNO564vvOp4Rd3jL+8S/u1PQyjeRzjS2z1uWcHgJyyQ0YqYbz33ntHjx49derUes5AyICcsD4A4R8y1hPG/v37uUOG9M//9MbOp0Ze3DH+8i7Nizt+v+vppmc/1/Ts5zq/9PnRl3beeXmX/PkvXn3uSdlf/gXrmLLyQXrJ+mPGQsbZAYCPjJCRShiHDh36+OOPGxsbr1271tramsoZCBnbUTJJohESXSbJZFb5MolGMsqxPgDhGTLSE0bOkHH3b76peP6Lrc892bLjiYHnn7m9e6dx986x3bsMu3d2f/nzzTue+P2upzUv7ph49T+yjokpZDAeomA8YoGQAVCYjJDh8/lqa2svX77c1dUll8tVKpVGo1EqlT6fDyFj20kmiWOaSD4gDcfJvJ0kEmvliQSZt5OG40TyAXFMp+cMrA9AeIaM6urq3WlOnDjB0WLHKy8qv/rs2O5d2hd3SHc9fWXHE+27nv79rqev7Hii+8tfGH1pp2H3zt6vfOHGKy+yjinP3JB9DoWjMgCwYTySkW0zHsmYfOqp9Ym7QokHxjgSMXa6HEnUHkp++s/JUwcTFz5Kum0kmSTJZNJtS1z4KHnqYPLTf07UHiLLkfU5xLw+QMkI/xVW69Xmjv/09ZYdT/Z85QujL+00vLSz7yvPyJ//Yip2dHzp6ZYvfV7xv/6nR69jHRNOlwCUQ7G/wlrw7lOQ/W6qEcam0gvFkDPEKBpZOXNkteYAaT6WOPl2/PTh5H1n8r4zfvpw4uTbpPnYas2BlTNHSBQhAx5TlJtxJeKx+0ODyh99r+XLz7Tvenr4hR2qrz57fedTbXteMBz5IDCT+16zfC785LjGExd+AhQAIUOovragZDIxZ42ePhL/6Efkws9WJe9EfvFW5BdvrUreIRd+Fv/oR9HTRxJzVpwugQzFva140G67c+LYja+90v6Nr01/diZK4/dyAMSreCEj/WxFxh49+yRFRmW2Mx18SkjWiRI+501ytsbRPttycVfLGBvbIqQPgHvxc75v2TUZ343HJBKrLkv4k/fiH36P1L27eu7Q6rlDpO7d+IffC3/y3qrL8scLNQghCBlACMEPpAHAuhIfyWA8fpCzMP1VPrEj4zH3QYvsBMDdKc9F4L+k2aNibI2tkQLGxtgpq2RyxW3zf/D9+E9fJ796g/zqjfhPX/d/8P2V1CUaj0PIAIKQAQDrSh8yOP6+55iRv7xCRmG95DwSw1aNo7DgReCekW1s3O08JpmMu6y+Q9+NHfsBOfz35PDfx479wHfou3GXFSEDGCFkAMCaMh7J4K5cgpBRcBd5NcV2SIbnU0FCBv+BZUqsxqxTvqNvRo7/kPz09egb34y+8U3y09cjx3/oO/pmzDpFEqvp1REygCBkAMC6bXu6hGf72YXlOl3C9moRT5ckE8uWe55jby2+/xqp+s7i619f+KdvL/zTtxdf/zqp+s7i+695jr21bLlHkn+8LAMhAwhCBgCsK8GvsDKeGWEs4RMgcpZkNMh9gqaAExzco2U8ScExb87hsbUs1Ng4okYiEr7//g+CVd8h7+wN7N1z/+C+qGMm6pi5f3BfYO8e8s7eYNV37r//g0QkvD4LQgYQ0YYMl8tlMBg0Go1KpZLL5T09PR0dHXq9vtzjAtjK8FPvW8kGTwBlSCwtOt/8tu+1P/P/1UsLB/cvz9wlyQRJJpZn7i4c3O//q5d8r/2Z881vJ5YW12fB+gBEhCFjdXXVbrfbbLb5+Qc2x5zN5rTanFarg6IetbS0lHt0AFsZQsaWkfPIRN4SifDEqP3735p76+8i5snk6trlF8nV1Yh5cu6tv7N//1vhidH0b7FifQAitpARDAYnJyedTqfX6x01jGt1xhGNQT2iV6tvzVhsly5dKvcAAbYyhAzgkkgkwouJpXD6hReEEJJMJJbCifAi7pMB2cQVMoxGo8fj8Xg8c3Nujc547lz9mTNn6+pOSySnps3W+vr6vFrL+Al4jjq4PSgAQcgAQWF9ACK2kKHT6fx+/9zcnN1uHx7Rq4f1SrVuSKmVK0ampmclEkm+DTL+0En2q2wVALYVhAwQENYHIGILGSqViqIol8tls9lV6lsSyana2tqampqamppRw5hUKlUoFH19fSqVymQyLS4u5mwQIQOAP4QMEBDWByBiCxlyuZyiKKfTabHMDil1g0Ma+eBIv1zdPzA4PT1N03QsFltZWQkEAhaLpa+vj62d7N9OY/w1NYQMgHQIGSAgrA9AxBYyZDIZRVEOh2NmxiJXjAzIh/sH1Ff0lzt7OyORSDgcToWMSCQSiUTa2toYG+H/u/AIGQDpEDJAQGMAY2PiChnt7e0+n89ut09Nmfvl6r5+VU/f0KuN37jedT0UClksloWFBbfbrdfrg8Eg2zdaETIACoOQAQKiKPzsNojsSEZbW5vX67Xb7fdMU739qp7eoe4eRVe3vLtbFo1GrVar3++fmJiYmJgghDQ1NTE2gpABUBiEDAAQlrhCRlNTUyAQcLlcd++aZD1D3bLBm93yzpsDnZ03o9Ho1NSU3+83Go1Go5EQwnbbDIQMgMIgZACAsMQVMjo6Orq6ukwmk9M5p1Bqu2SKjs5+aWe/VNoejUYnJycpitJqtTqdjhDS0NDA1k7F4wjLhZ/p5cVeNADxQ8gAAGGJK2QQQhwOR2NjY3Nzs0aru2ey3Bk33b5zTyqVxuNxs9nsdrsNBsP4+DghpK6urtyDBdhSEDIAQFiiCxkpNptNIpFUVVUdPHjwwIEDdXV1RqPR6/UGAoFQKERRlMFguHjxYrmHCbClIGQAgLBEGjIyJBIJi8Uik8lu3LjR2tra2tqqVCr53IwLAPhDyAAAYW2OkAEAJYCQAQDCQsgAgDUIGQAgLIQMAFiDkAEAwhJpyHC5XAaDQaPRqFQquVze09PT0dGh1+vLPS6ArQwhAwCEJbqQsbq6arfbbTbb/PwDm2POZnNabU6r1UFRj9juIw4AgkDIAABhiStkBIPByclJp9Pp9XpHDeNanXFEY1CP6NXqWzMWG9stPgFAEAgZACAscYUMo9Ho8Xg8Hs/cnFujM547V3/mzNm6utMSyalps7W+vj6v1jJu98lRbaPjBtgSEDIAQFjiChk6nc7v98/Nzdnt9uERvXpYr1TrhpRauWJkanpWIpHk2yDjz5RkVEDIAEjZJiHD6XLLFcPXf9+FCVPpJ7li2Olyl/tDUDriChkqlYqiKJfLZbPZVepbEsmp2trampqampqaUcOYVCpVKBR9fX0qlcpkMvG5GVfOkMH9EsC2sk1Chnve66EC5R4FbFMeKmB1Pij3KEpHXCFDLpdTFOV0Oi2W2SGlbnBIIx8c6Zer+wcGp6enaZqOxWIrKyuBQMBisfT19bG1k/1zaGw/kEYQMgD+xfYJGeUeAmxrCBllI5PJKIpyOBwzMxa5YmRAPtw/oL6iv9zZ2xmJRMLhcCpkRCKRSCTS1tbG2Ei+v+qOkAGQgpABUAIIGWXT3t7u8/nsdvvUlLlfru7rV/X0Db3a+I3rXddDoZDFYllYWHC73Xq9PhgMsn2jFSEDoDAIGQAlgJBRNm1tbV6v12633zNN9farenqHunsUXd3y7m5ZNBq1Wq1+v39iYmJiYoIQ0tTUxNgIQgZAYRAyAEoAIaNsmpqaAoGAy+W6e9ck6xnqlg3e7JZ33hzo7LwZjUanpqb8fr/RaDQajYQQtttmIGQAFKYYIaMif9xz7d27l2NGPkoWMsq7bcGWTbQKCBkFfIg20n5GIWNNjpLH6osqZHR0dHR1dZlMJqdzTqHUdskUHZ390s5+qbQ9Go1OTk5SFKXVanU6HSGkoaGBrZ3s94vt3S/4vwRg6xE8ZDBusG7evFmRlhUYq2U/Xn+6d+9ekvWJzutTjCMZUF6FhYyMD07Oj1K+7XOUVLD/uc5Y7bF2RBUyCCEOh6OxsbG5uVmj1d0zWe6Mm27fuSeVSuPxuNlsdrvdBoNhfHycEFJXV1fuwQJsKUUNGRnlqayQXS3fkFHAYiJkQHkVfLok44OTXVL6kMHdCBFhyEix2WwSiaSqqurgwYMHDhyoq6szGo1erzcQCIRCIYqiDAbDxYsXyz1MgC2leKdLsguzt4zZuSH76eHDhysqKhoaGrhDBver2SGDo/eMRrhrZsQjxgVnTFFsHeV8ixj74l58KLsShww+6wPjOpz+KkchW79rL4kzZGRIJBIWi0Umk924caO1tbW1tVWpVPK5GRcA8FekCz8Z94JsISN7xvSnxQgZ/DemeW12uZ9m54zsCjxn59k7iIc4Q0bGY+5VlK0jhpY3RcgAgBIo6rdLMjZVjFvG7FTBJ2SwZRQ2bEcyskuym+XYiDMuMttTPimBo7WMbT3j4iNkiJYIT5dktJnRGuNHACEDAPKzKUIGYUoVeW1b2a7JKGx/z1FYmpCR1yBBDEQYMrjXw8JW+LVChAwASCnBt0vWHxd24Wd2yOBIJ2xbW7GdLmGrsMGMgpAhWqUJGRmfjnwjLM/VPmdKFmnIcLlcBoNBo9GoVCq5XN7T09PR0aHX68s9LoCtrEghI2Mbx5gPGJ+yIbk2oNxb1eyQwbMRxpo5CxnLOZ5mP97IONneBCijwkJG9v9pRkkFE8IvZGRX47my5WxfdCFjdXXVbrfbbLb5+Qc2x5zN5rTanFarg6Iesd1HHAAEgTt+ihniwpaBO36WTTAYnJycdDqdXq931DCu1RlHNAb1iF6tvjVjsbHd4rPE+H/UuWtikwFig5AhWjgssZUgZJSN0Wj0eDwej2duzq3RGc+dqz9z5mxd3WmJ5NS02VpfX59XaxkHizjqbCQ3cLScsyNsMkBUEDIASgAho1iUSmV1dTVHBZ1O5/f75+bm7Hb78IhePaxXqnVDSq1cMTI1PSuRSPLtMf30EserbBW4ZyG54ktejwHKbvuEDA8VKPcoYJvyUAGEjKJQKBR79uzZvXs3Rx2VSkVRlMvlstnsKvUtieRUbW1tTU1NTU3NqGFMKpUqFIq+vj6VSmUymfjcjEvYkJGzEbZCjo6QM0A8tknICIeX5z1+TJjKNYXDy+X+EJROiUJGKmHs27ePO2TI5XKKopxOp8UyO6TUDQ5p5IMj/XJ1/8Dg9PQ0TdOxWGxlZSUQCFgslr6+PrZ2Mq6tZSzJniXnUiBkwNa2TUIGAJRMKULGesLYv38/d8iQyWQURTkcjpkZi1wxMiAf7h9QX9Ff7uztjEQi4XA4FTIikUgkEmlra2NshHGPzn3QorBzJfxbQ8iATQEhAwCEVfSQkZ4wcoaM9vZ2n89nt9unpsz9cnVfv6qnb+jVxm9c77oeCoUsFsvCwoLb7dbr9cFgkO0brfmGjA1+WwQhA7YMhAwAEFbRQ0Z1dfXuNCdOnOCo3NbW5vV67Xb7PdNUb7+qp3eou0fR1S3v7pZFo1Gr1er3+ycmJiYmJgghTU1NzIuU5231+C9LvmdG+PSIkAHigZABAMIS11dYm5qaAoGAy+W6e9ck6xnqlg3e7JZ33hzo7LwZjUanpqb8fr/RaDQajYQQtttm8A8ZBezgcx63yCtkIGGAqCBkAICwxBUyOjo6urq6TCaT0zmnUGq7ZIqOzn5pZ79U2h6NRicnJymK0mq1Op2OENLQ0MDWTsXjMko4quXE+BVWPqmFsReEDBAVhAwAEJa4QgYhxOFwNDY2Njc3a7S6eybLnXHT7Tv3pFJpPB43m81ut9tgMIyPjxNC6urqyjJC7iQhSDsAZYGQAQDCEl3ISLHZbBKJpKqq6uDBgwcOHKirqzMajV6vNxAIhEIhiqIMBsPFixfLPUyALQUhAwCEJdKQkSGRSFgsFplMduPGjdbW1tbWVqVSyedmXADAH0IGAAhrc4QMACgBhAwAEBZCBgCsQcgAAGEhZADAGoQMABAWQgYArEHIAABhbZ2QsWg6QKsqU1Pcbyz3cAA2H4QMABDW1gkZtKoyGRxNBkcj1uPraSM1LZoOlHt0AuO+xwbuwAGFQcgAAGFttZARsR7PnmhV5SqtKP2QirSzz/cn2QB4QsgAAGFtmpChVCqrq6s5KtCqygStzDiGsSWPZzDe2py7DgAfCBkAIKzNETJSvxfP/TPxtKpy5aE0dTxjlVas0gPx+62pKTz9fmj8TVpVWbIBFw/Pn5tnKwTgIGzIYPzxIMZ+8/r9IADYRDZByEgljH379uUOGR4praok4bsxhyRq/TRi/mXEdCw8eTg1cYQM7p9P418z/ZfS2A4wZFcjLEcj2Ia6kUIADoIfycj4mHD3jjUWYOsRe8hYTxj79+/PGTKi7npaVZkMaDJCxuJYFUfIYNwObrAw59PsnJFdP+doCygE4ICQAQDCEnXISE8YvEKG8ze0qjLpV0btp5ZnayLmE5G7x8LjP18cqwrp3815JCO7hO2gRc7Z18vZnvLJKGxD3UghAIdiXJOxfqwuvYTtc5ReIfsx47z8jwICQOmJOmRUV1fvTnPixAmOyrSqMmr7iFZVrnp7lmdrIuaPl0zHwhOHQ7d/Ehx9J6B9O+c1Gfz39zx36ggZsLmUIGTwPPKX16FErOoAoiXqkJEXWlW5dO8faVVl3N0UnZVEzJ8s3f0oPH40ZPwgqHs3MMIaMsp+uoStPpucaYZ/UwDpSnMkg7Bf8MT9mO34IgCI1tYJGel3/MzrK6xsmy22A7P5FnIc7GV8mnNJ891eA/BUstMlGQ+yn/KpDwDit3VCxrbCvbXFthgKU6T7ZORMDzyrcRzeKGx5AaDYEDIAYE0JQgZhOs7HeOSPuzCjNcHfCgAQBEIGAKzBHT8BQFgIGQCwBiEDAIS13UNGMBh0u92zsJm53e5gMFjuVWkrQMgAAGFt65BB0/T8/PzS0tLKyqrbG7o0OHWkRXfkyuNTi+7S4JTbG1pZWcUkzmlpaWl+fp6m6XKvUJseQgYACGtbhwyH3R6LxmKxeIfedvza2GdKd4uBvjYR/t34Ymq6NhFuMdCfKd3Hr4116G0xEKl4LBpz2O3lXqE2PYQMABDWtg4Zs7OzKysr0VjsSMutyzrvZa33ksZz8fHpksZzWeu9rPMeabkVjcUwiXNaWVmZnZ0t9wq16SFkAICwtnvIiK+sLC8vH7mi651dvT6xeFnnuaR5eHFkbbqkeXhZ67k+Huq1rh65cmsZxCqOkCEEhAwAENZ2DxmxeHwpEjnScqtWNvO72/6b09F+W7LPlui1rvZZE322RNd0rO12UNJrPdxiXIpEyjJVVFSUq+uy985zisXjCBkbh5ABAMLa9iEjFguHwx9e1dfKZk71Wc/KXedV9y9rvW1jwSYddUH98Jxi4dSAu6bX/cFVUxjEKhaLIWRsHEIGAAhru4eMaCwWWlw8elUv6bGcGbB/pnBfHH7QpPO1GgPNevqSxlev9l1o/W1rw1u/u3Twd5cP3Rq+HlpcxCS2KYqQIQSEDAAQ1nYPGcvLy8FgsL7L+F7D0EfXx0/KZi9p/tCsp9vGQi2GwCVd4PzVSzdaDqk1Z4f159W6zzpu/EKrvhZkkX4X5OxC/jXXCxnnzS5ff8zWEWMXbEPiHrk4LS8vI2RsnLAh4/ivTmLChGmbTwgZy4FA4GLvHZll5YJ64ZN208fSu592Tv+ma6bm5szHnfaLJ3+o1l4YHm2s/ejQyV/+ZNjQdPW3PwkwqaioyH68wcKcT9NnZ2uK5+w8excnhAxBCB4yyrEQACAi2z1kLC0t0TT9YYte0jt7bTzQbYkNOMiAPdlvTw7YycAc+azmh8PG1uGx1pqjP645+vbw+PXmC1U0i9QePbtkHUdNtsJUOdvT9ceMhWyDZJydcZw5WxOJpaUlhIyNQ8gAAGFt95ARDod9Pt+/XPhpOzfoOq++f1nra7sdatKHzuuWT//6BwrlWaX6M7XmvFp7QTlyvrHhPR+niooKxsfcNTkKM0oY2y+sU8bZ+QxSbMLhMELGxiFkAICwtnvIWFxc9Hq9R6/qa2Uzf7zw8xbdOrbUNLZy6dSPZLJP1NqGAdkJxcCvB/t+3fLb969fO+tlUlFRkf14g4U5n+acPXVkouDZs5+K0+LiIkLGxiFkAICwtnvICIVCf/iD57Muw7E2Q03X9LnBucs6b4sx1DZJfnvqR709vxk2tvb21p759I36k2811L197Xenx++a//AHT/aUfrqBsZy7Zs5CxnKOp9mPNzLOjMpim0KhEELGxiFkwLZVUVFR7iFsTQgZoQcPHo5NmNrl+lrp6Ict+iMt+p+13G4++0bXjcNq9dmentrGc/+3XTEmV+vlav3tiakHDx5u6qmioqLsYxB8QsgQBEIGbFsIGUWyrUOGw+EIBAJer/fBgwcOp0tnHJerb6Wmq5dPfHbqwPnTb7ddqZGrbzldcw+2hPXDEuUeiJC8Xm8gEHA4HOVeoTY9hAzYthAyimRbhwyapufd7tQWM8M9s1VjmNAYJu6ZraW72wMUJBAIzLvdNH7qfcMQMmDbQsgokm0dMgghNE077PZZ2MwcdjsShiBKEDLWj6VxFGZXyKjMv5y7KQ6M4+SoxrMjPovP0TvjG1XY7BwVOAbPZ3EEX8zCBpDvePj890EBtnvIAIB1xQ4ZGTsYnoUZLTC+xLF3LGDnwTgk7pp8euG5yGy9c9fMOfgCZs8oz95J8+woZ+981gGOAXDX5Dk2hIwiQcgAgDXiDxmML3HvJIoaMvhX479H5/+GFBYyChgS40sb7IixAvd/IscAOGoiZJSXSEOGy+UyGAwajUalUsnl8p6eno6ODr1eX+5xAWxlpbwmg3srX5GGY0bCvn9ibIGxTcZqbI/5j4qxTT6FhH1PybY43IOveBzPt4j/O8+nI8bF5PmGrD9Of8C97DnfT/6vwgaJLmSsrq7a7XabzTY//8DmmLPZnFab02p1UNSjlpaWco8OYCsrWcjguUtmq8z4NOfsxSjM+TRjv8inkLC8IYyz8x8nd2jYyGJy/N9xLyZ3U9zLy71EOVewnLOAUMQVMoLB4OTkpNPp9Hq9o4Zxrc44ojGoR/Rq9a0Zi+3SpUvlHiAh+ayL3DWxToPYlCZk8Nwl51Wfz2O2P39J1k4o55C4l6iwNguOODxrCh4ySFomKKAjnoMvIPTwfMxnYLBx4goZRqPR4/F4PJ65ObdGZzx3rv7MmbN1daclklPTZmt9fX1eraV/ANhWII6Ey1afZwt8amK1BlEpzbdLOEoK2NUx5oa8UkJ2hY2HjALaLHYcKUbI2EhHjBXYhsS4meXYxm4wcICAShoylEpldXU1RwWdTuf3++fm5ux2+/CIXj2sV6p1Q0qtXDEyNT0rkUjy7ZF7A1HA/p5tvcwZMvh8hgHKq5QXfjIWbmRXl1fIEHDnzf10C4cMtq3fRjriP2DGCtw9coyZuzXYiNKFDIVCsWfPnt27d3PUUalUFEW5XC6bza5S35JITtXW1tbU1NTU1IwaxqRSqUKh6OvrU6lUJpNpcXExZ6d8/grhWSG7Dv+/bPL6GwigXEoQMtj+1mQryf4oZRfmbCF9O8DRJv+a2b3zWVL+bQpeyPh+8i/kbpNtwQVcouxyto54DrXicQSb4qIpUchIJYx9+/Zxhwy5XE5RlNPptFhmh5S6wSGNfHCkX67uHxicnp6maToWi62srAQCAYvF0tfXx9ZO9vqXc43ksxTZHwa22QuuCVBGuOMnbFvYFBdJKULGesLYv38/d8iQyWQURTkcjpkZi1wxMiAf7h9QX9Ff7uztjEQi4XA4FTIikUgkEmlra2NsJCOuchSyzcWGMXHzaZ+tJs9+AUoDIQO2LWyKi6ToISM9YeQMGe3t7T6fz263T02Z++Xqvn5VT9/Qq43fuN51PRQKWSyWhYUFt9ut1+uDwSDbN1pLGTJyPs75KtZsEA+EDAAQVtFDRnV19e40J06c4Kjc1tbm9Xrtdvs901Rvv6qnd6i7R9HVLe/ulkWjUavV6vf7JyYmJiYmCCFNTU3Mi1TWkJGzcYQMEC2EDAAQlri+wtrU1BQIBFwu1927JlnPULds8Ga3vPPmQGfnzWg0OjU15ff7jUaj0Qjb8LEAAAOhSURBVGgkhLDdNoN/yMiZPHg2ztYm/7kAxAAhAwCEJa6Q0dHR0dXVZTKZnM45hVLbJVN0dPZLO/ul0vZoNDo5OUlRlFar1el0hJCGhga2dhivHGa88JPtalCOljlm52iHrXee/QKUAEIGAAhLXCGDEOJwOBobG5ubmzVa3T2T5c646fade1KpNB6Pm81mt9ttMBjGx8cJIXV1dWUZIXeSEKQdgLJAyAAAYYkuZKTYbDaJRFJVVXXw4MEDBw7U1dUZjUav1xsIBEKhEEVRBoPh4sWL5R4mwJaCkAEAwhJpyMiQSCQsFotMJrtx40Zra2tra6tSqeRzMy4A4A8hAwCEtTlCBgCUAEIGAAgLIQMA1iBkAICwEDIAYA1CBgAICyEDANYgZACAsLZOyFg0HaBVlakp7jeWezgAmw9CBgAIa+uEDFpVmQyOJoOjEevx9bSRmhZNB8o9ukzcN8nALTSgLBAyAEBYYg8ZWq02HA7zqZkKGRHr8eyJVlWu0gru2fnckTPf24Ny9JVv1wAlgJABAMISe8i4evVqW1sbRVE5a9KqygStzDiGwfN4Bp/7gmdXLhifnzJByIDSQ8gAAGFtgpDh9XrPnz+/sLDAXZNWVa48lKaOZ6zSilV6IH6/NTWFp98Pjb9JqyrZ5i3l7cD535UcOQNKDCEDAIS1CUIGIYSiqJMnT87OznLUpFWVKx4praok4bsxhyRq/TRi/mXEdCw8eTg1MYaM7J9SyyhnnIWtET5LxNYmY7N8GgQQCkIGAAhrc4QMQsjDhw+PHTv26NEjtpq0qjLqrqdVlcmAJiNkLI5VsYWMFLbdOZ+Qke85DhzJANFCyAAAYW2OkEHTNJ8jGVHnb2hVZdKvjNpPLc/WRMwnInePhcd/vjhWFdK/W7yQwfY78nn1xdhyztYABISQAQDC2gQhw+fz8bwmI2r7iFZVrnp7lmdrIuaPl0zHwhOHQ7d/Ehx9J6B9uwRHMvhAyADRQsgAAGFtgpDB/9slS/f+kVZVxt1N0VlJxPzJ0t2PwuNHQ8YPgrp3AyOlCBkFXJaBb5eAeCBkAICwxB4y+N8nI/2On3l9hZX7ws/08gKuEmXrkXEAHHUASgAhAwCEJfaQsVVxZwgkDCgLhAwAEBZCBgCsQcgAAGEhZADAGoQMABAWQgYArEHIAABhIWQAwBqEDAAQFkIGAKxByAAAYSFkAMAahAwAENbWCRnp98mI+43lHg7A5oOQAQDC+v/T8ygGQnzQxgAAAABJRU5ErkJggg==" alt="" />
下面进行第二部,传入用户名、session,如果验证正确则查询中表中的数据:
@server.route('/getall',methods=['post','get'])
def getall():
username=flask.request.values.get('name')
session=flask.request.values.get('session')
k='session:%s'%(username)
redis_session=op_redis(k,db=2)
if username and session:
if redis_session:
if redis_session==session: sql="select red,blue from seq "
response = op_mysql(sql)
else:
response={'code':101,'msg':'session非法'}
else:
response={'code':102,'msg':'未登录'}
else:
response={'code':103,'msg':'必填参数为空'}
return json.dumps(response,ensure_ascii=False)
以上是在k-v参数中传入session值,如需需要在cookie中传入session,代码如下:
就是把session=flask.request.values.get('session')改为session=flask.request.cookies.get('session')则取值就是在cookie中进行取值了。
@server.route('/getall_cookie',methods=['post','get'])
def getall_cookie():
username=flask.request.values.get('name')
session=flask.request.cookies.get('session')
k='session:%s'%(username)
redis_session=op_redis(k,db=2)
if username and session:
if redis_session:
if redis_session==session: sql="select red,blue from seq "
response = op_mysql(sql)
else:
response={'code':101,'msg':'session非法'}
else:
response={'code':102,'msg':'未登录'}
else:
response={'code':103,'msg':'必填参数为空'}
return json.dumps(response,ensure_ascii=False)
在我们登录购物网站的话,如果勾选记住密码,一般情况下就是在客户端浏览器上添加了cookie,这样用户打开网站后后台会自动校验cookie信息,不用每次都传一次,如下是设置cookie的代码:
要在页面添加cookie需要先response=flask.make_response(),然后response.set_cookie('session',session)set上要添加的cookie信息
@server.route('/login_setcookie',methods=['post'])
def login_setcookie():
username=flask.request.values.get('name','')
password=flask.request.values.get('passwd','')
sql="select * from my_user where username='%s';"%(username)
if username and password:
if op_mysql(sql):
print(op_mysql(sql))
if password==op_mysql(sql)[0]['passwd']:
session=md5_password(str(time.time())+username)
op_redis('session:%s'%username,session,expired=6000,db=2)
response=flask.make_response()
response.set_cookie('session',session)
msg={'code':200,'msg':'登陆成功','session':session}
else:
msg={'code':101,'msg':'密码不正确'}
else:
msg={'code':102,'msg':'用户不存在'}
else:
msg={'code':103,'msg':'必填参数为空'}
return response
添加cookie后,我们在调用getall_cookie时只传入name,就能直接获取到seq表中的数据了。
aaarticlea/png;base64,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" alt="" />
aaarticlea/png;base64,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" alt="" width="660" height="277" />
补充:
mysql注入原理
上述代码中存在的sql语句如下:
sql="select * from my_user where username='%s';"%(username)
在获取username时,由于存在‘’,所以存在漏洞;
我们知道‘1’=‘1’是恒为真的,我们可以通过‘’,来模拟制造出这种恒等式,使sql在执行时跳过一些校验,从而进阶访问系统。
当我们输入name=“' or '1'='1”
我们将上述name的值带入sql如下:
sql="select * from my_user where username='' or '1'='1';"
我们在sqlyog中my_user表中执行这个语句,查询出了所有的用户信息,
aaarticlea/png;base64,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" alt="" />
在一些查询操作中,很容易产生漏洞,造成信息的泄露。
还有一种注入方式是:username="' show tabales ; --"
sql="select * from my_user where username='' show tabales ; --';"
sql语句中--表示注释掉后边的语句,这样就查询出了所有的表,可以对数据库随意进行操作。
为了防止sql的注入,在编写sql的时候我们尽量避免使用‘’,写成如下方式:
sql="select * from my_user where username=%s;",username
这样在传参的时候,可以直接传到输入的参数进行取值,例如:
def op_mysql_new(sql,*data):#第一个是位置参数,第二个是可变参数
cur.execute(sql,data)
#data是一个元祖,*data获取出所有传过去的参数
print(cur.fetchall())
sql="select * from users where name=%s and passwd=%s;"
name='pei'
passwd='123456'
op_mysql_new(sql,name,passwd)
###################################################33
传参:
def test(a,b):
print(a,b) li=[1,2]
test(*li)#一个星代表把list里边的数据穿进去
d={'a':'123','b':'456'}
test(**d)#两个星代表从字典里边的数据传进去