web应用里的flash message有什么作用
小标 2018-05-29 来源 : 阅读 1284 评论 0

摘要:本文主要向大家介绍了web应用里的flash message有什么作用,通过具体的介绍,让大家明白,希望对大家学习flash有所帮助。

本文主要向大家介绍了web应用里的flash message有什么作用,通过具体的介绍,让大家明白,希望对大家学习flash有所帮助。

flash 提示信息一般显示一段很简单的信息告知登录之类的信息,具体如下图:

web应用里的flash message有什么作用

正常情况下的登陆页面应该是下面这个样子的,就是没有任何信息提示:

web应用里的flash message有什么作用

登陆成功后的主页显示“登陆成功”的提示

web应用里的flash message有什么作用

flash信息显示的时候也许会比较特别,不过这并不是他特有的,显示的效果只不过是html渲染的结果而已。

这儿要讲的是这种技术实现的背景以及方法

看到上面这两个图片大家也许觉得很好做,登陆出错的时候直接渲染一个登陆页面并且加一个“账号或者密码错误”的信息就可以了

我们现在来具体看看浏览器请求和服务器处理的过程:

1. 客户端打开登陆页面
client=>login:get

2. server收到请求后返回登陆页面
server=>login.html

3. 用户填写完毕后发送post消息
client=>login:post

4. server验证登陆

o 成功
redirect到登录前的网页并显示“登陆成功”

o 失败
redirect到login.html,这样回到步骤1,但这个时候需要显示“登陆错误”消息

其实失败了有两种方法,上面只是用了flash提示的方法,具体两种如下:

· 直接渲染并且返回一个“登陆错误”的特殊页面,这个很好理解也很容易做

· 继续redirect到login:get页面并且显示登陆错误信息

第二种方法看似简单其实需要处理的是:对于login controller来说他怎么知道需要给客户端显示登陆错误还是返回普通的登陆页面?

也就是login:post controller需要给redirect后的login:get controller发送一个消息告诉他上次登陆失败了,但redirect是发送一个url让浏览器重新发送请求的过程,所以两个controller无法直接发送消息

既然是服务器端内部的消息共享,那么这个可以存储在session里吗?
我们来设想下:login:post发送登陆失败就在对应session里写入一个标记,login:get渲染页面的时候检查是否有登陆失败标记,如果有就在渲染的页面里加一个“登陆失败”的信息提示就可以了。
但极端情况下,如果客户端没有收到redirect消息(断网,断电,丢失连接)那么下次客户端login:get的时候会显示一个 登陆错误提示,这个显然是不合理的(假设session还没过期)

另一个方法就是ruby on rails里提供的flash方法,就是login:post检测发现错误了就给客户端加一个cookie并且发送redirect到login:get,这样下次login:get收到请求后发现cookie里有flash消息就知道上一次登陆错误了,那么渲染的时候附带一个错误消息就可以了,如果cookie没有附带这个特殊消息就正常渲染。

如果客户端没有收到login:post的redirect也没关系,下次再获取login:get的时候就是正常页面,不会1天以后第一次登陆就显示登陆错误了

另外login:get发现了flash一定要及时清除,不然以后这个cookie一直存在,设置对应cookie的expire时间就可以了,设置成1970年,也可以同时把flash对应的value删除

flash具体用什么key保存是没关系的,只要与其他cookie不冲突就可以了,默认可以用flash,_flash之类的

本文由职坐标整理并发布,希望对同学们有所帮助。了解更多详情请关注职坐标常用软件Flash频道!

本文由 @小标 发布于职坐标。未经许可,禁止转载。
喜欢 | 0 不喜欢 | 0
看完这篇文章有何感觉?已经有0人表态,0%的人喜欢 快给朋友分享吧~
评论(0)
后参与评论

您输入的评论内容中包含违禁敏感词

我知道了

助您圆梦职场 匹配合适岗位
验证码手机号,获得海同独家IT培训资料
选择就业方向:
人工智能物联网
大数据开发/分析
人工智能Python
Java全栈开发
WEB前端+H5

请输入正确的手机号码

请输入正确的验证码

获取验证码

您今天的短信下发次数太多了,明天再试试吧!

提交

我们会在第一时间安排职业规划师联系您!

您也可以联系我们的职业规划师咨询:

小职老师的微信号:z_zhizuobiao
小职老师的微信号:z_zhizuobiao

版权所有 职坐标-一站式IT培训就业服务领导者 沪ICP备13042190号-4
上海海同信息科技有限公司 Copyright ©2015 www.zhizuobiao.com,All Rights Reserved.
 沪公网安备 31011502005948号    

©2015 www.zhizuobiao.com All Rights Reserved

208小时内训课程