>用户点击按钮获取价格
>生成请求的唯一URI,用户将重定向到问题页面
>用户回答问题,用户提交答案.问题分布在通过角度路由导航的多个页面上.答案将在页面导航中保存回服务器.
>一旦用户提交答案,系统(服务器)就会生成价格并将其显示给用户.
目前,如果用户已经为URI添加了书签,他可以在几天之后返回,并从他离开的地方继续.我想阻止这种行为.
我在MVC中有哪些不同的选择?我可以想到以下几点:
>使用带有过期时间的HttpCookie
>在DB中保存上次访问时间并验证用户是否在规定的时间范围内?
我想避免HttpSession.我倾向于使用HttpCookie,因为它看起来是最简单的选择.
>如果我们选择HttpCookie选项,是否有任何副作用需要记住?
>我可以寻找MVC中的其他替代方案吗?
解决方法
我相信你可以用这样的方式创建你的URL
伪代码:
var info = [Payload any info you need to store(questionnaire id or so)] + [expirationDate] var sign = HMAC256(info + [SERVER_SECRET]) var clientLinkParameter = info + sign var clientLink = [baseURL] + [delimiter] + Base64(clientLinkParameter)
* HMAC256 – 只是您可以使用任何算法创建签名的示例
现在,您可以通过解析分隔符前部分中的序列化数据来检查链接是否过期.您还可以通过检查来检查日期是否未被修改:
HMAC256([partBeforeDelimiter] [SERVER_SECRET])和[partAfterDelimiter]用于相等.如果它们匹配,则这是您的服务器发送的链接(因为只有您的服务器知道[SERVER_SECRET]是什么),否则它被客户端修改.
现在,您可以将任何非机密数据存储在用户链接中,允许用户共享此链接以及您可以使用链接执行的其他重要操作,而无需担心有人修改我们的链接.如果广泛知道的序列化算法如JSON,客户端也可以反序列化第一部分.
我认为这个流程将带来更好的用户体验,以防突然关闭浏览器(将在您的情况下清理cookie)并与他人共享链接(如果您需要)
希望这会有所帮助.
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。