加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-15 08:22:05 所属栏目:百科 来源:网络整理
导读:我正在使用一个Web应用程序,它是MVC 5 Angular JS混合. Web应用程序中没有身份验证,匿名用户可以来询问某些服务的价格.为了获得价格,用户需要回答几页中的一些问题.这是app的流程. 用户点击按钮获取价格 生成请求的唯一URI,用户将重定向到问题页面 用户回答
我正在使用一个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)并与他人共享链接(如果您需要)

希望这会有所帮助.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读