session保存密码_从Flask框架中浅谈session和cookies

大家在爬虫的时候,经常需要处理cookies和session登录的问题,能否拿到session和cookies对于重复登录至关重要,那cookies和session是什么,又是如何使用的呢?小编将以轻量级Flask框架为基础,从前后端实现的角度对此问题进行解答:

cookies是一种数据存储手段,能将一段文本保存在客户端(浏览器)的一种存储手段,并可以长时间保存,其主要使用场景包括密码记忆、搜索关键词记忆, cookies主要特点是以浏览器为单位,不同的浏览器之间的cookies是不共享的,同时,各个网站之间的cookies也是相互独立的,cookies可以解决服务器端的一些存储问题,允许将非重要的数据保存在客户端浏览器中,从而节省服务器端的位置,并可以长时间保存数据,其缺点就是明文显示所有的数据,并且cookies内容在客户端是允许被修改的。

在Flask框架中,要通过设置响应对象将cookies从服务器端带到浏览器上并进行保存,而响应对象又主要分为两种,resp = redirect('/重定向地址')和resp = make_response("字符串"|render_template())都是响应对象,在相应对象的基础上就可以添加cookies,语法为:响应对象.set_cookie(key,value,max_age),其中key为要保存的cookies的名称,value为要保存的cookies的值,max_age为cookies存活的最大时间(60*60*24*365表示1年),而为了识别cookies的正确性经常需要获取cookies,以cookies免登录界面为例,每当浏览器向服务器发送get请求时,都会把当前站点的cookies封装到请求头中并带给服务器,通过与后台数据库的交互,实现免登录操作,而cookies的获取主要通过request.cookies实现,当用户退出时,可以删除cookies,语法为:响应对象.delete_cookie('key'),具体业务操作如图所示:

db22d5c69fe7217baf26a05fe541204f.png

Flask框架中cookies操作

a1057b1862414cf1d068947fab62a8ee.png

cookies浏览器端显示

而session是保存在服务器上,为每个浏览器所开辟的一段空间,至于哪些数据需要通过session保存呢?服务器端在会话过程中经常要用到的,且安全性要求较高的数据,需要保存进session,例如小编之前做的登录网页,在post请求响应成功后需要通过request.headers.get('Referer','/')获取源地址网页url并进行跳转,但由于先进行了get请求,因此获取不到最原始的源地址网页,这里可以在get请求前获取请求源地址,并存放进session,如果没有请求源地址,则将 / 保存进session,然后在post请求后通过session.get('url','/')获取源地址,并使用响应对象 redirect(url)进行跳转,这是一个session的应用。

在Flask框架中,对于session保存数据的实现,首先需要配置SECRET_KEY,app.config['SECRET_KEY']='nicai',括号内为初始自定义,导入flask. session方法,通过语法session['key'] = value保存数据到服务器中, 如果要获取session中的数据,可以通过语法value=session['key']或value=session.get('key')实现,如果需要从session中删除数据,可以通过语法del session['key']实现。

2301f3c187c73eb57dc7bcf955d9fe59.png

Flask框架中session操作

9701825d42baf3d67a9e5db9abff22c2.png

session浏览器端显示

下面就以登录界面为例,说明session和cookies的综合应用,代码如下:

d5f152e1666a9215afcab3fb8b4cbe87.png

登录页get请求

089156bbeac6743b41ca01002bc03dc7.png

登录页post请求

访问路径http://localhost:5000/login,首先是get请求,将源地址保存在session中,并判断session中是否含有uname,如果有,则请求源地址;若没有session信息,判断浏览器端是否含有cookies信息,由于cookies信息可以在浏览器端被修改,因此要与服务器端数据库进行交互比对,比对正确,保存session信息,则请求源地址;若既没有session信息,也没有cookies信息,则返回登录界面进行登录;登录页填写信息后,发送post请求,服务器端接受表单信息,将表单信息与数据库hash加密信息进行比对,若通过,则登录成功,保存session信息,并请求源地址,并判断是否要存cookies(即网页中选填是否记住密码);若不通过,则登录失败,并返回登录界面,提示“用户名或密码错误”。

这只是登录页的基本代码,还有很多bug,例如,如果记住某人的cookies信息,就可以通过改变浏览器端的cookies信息,实现免登录操作,受制于水平的有限,这里只从服务器框架的角度给大家简单介绍一下session和cookies,需要交流和切磋的读者朋友,请在评论区积极留言,欢迎关注头条号:杜哥说python。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值