c# – 使用HttpCookie进行超时/ url到期

我正在使用一个Web应用程序,它是MVC 5 Angular JS混合. Web应用程序中没有身份验证,匿名用户可以来询问某些服务的价格.为了获得价格,用户需要回答几页中的一些问题.这是app的流程.

>用户点击按钮获取价格
>生成请求的唯一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)并与他人共享链接(如果您需要)

希望这会有所帮助.

相关文章

原文地址:http://msdn.microsoft.com/en-us/magazine/cc163...
前言 随着近些年微服务的流行,有越来越多的开发者和团队所采...
最近因为比较忙,好久没有写博客了,这篇主要给大家分享一下...
在多核CPU在今天和不久的将来,计算机将拥有更多的内核,Mic...
c语言输入成绩怎么判断等级
字符型数据在内存中的存储形式是什么