【问题标题】:How to list cookies with changes in AspNet Core如何在 Asp Net Core 中列出带有更改的 cookie
【发布时间】:2018-09-25 14:08:25
【问题描述】:

在我的应用程序中,我有设置 cookie 的过滤器:

HttpContext.Response.Cookies.Append("myCookie", "value")

当我在视图中打印 cookie 值时:

HttpContext.Request.Cookies["myCookie"];

它不存在。如果我刷新页面 cookie 已设置。发生这种情况是因为使用 Response.Cookies.Append 不会更新 Request.Cookies 集合。有没有办法查看当前 cookie 以及请求期间所做的更改?

在我的 Web 应用程序中,我有 IAsyncActionFilter,它会更新 cookie,但是只有在页面刷新后才能看到更正的值,并且我想用新值完成当前请求。我知道它会在响应完成时由浏览器设置,但我已经知道我对该 cookie 有新值,我想将此值传播到读取 cookie 的视图。

【问题讨论】:

    标签: cookies asp.net-core-mvc asp.net-core-2.1


    【解决方案1】:

    没有。这就是cookies的工作方式。它们来自客户。换句话说,cookie 是客户端在收到来自服务器的带有Set-Cookie 标头的响应后设置的。只有在客户端发出另一个请求,将 cookie 发回之后,它才存在于服务器端。目前尚不清楚您最终要在这里实现什么,但是您需要在设置 cookie 后强制执行新请求以访问该 cookie,即使这只是将重定向返回到同一页面。

    【讨论】:

    • 为问题添加了问题描述。基本上 cookie 缓存文本,如果该文本在后端更新,我希望既设置新 cookie 又使用新值。
    • cookie 不适合缓存。无论如何,要点是一样的:您必须先从客户端获得单独的请求。
    • 假设 cookie 存储用户首选语言,当用户点击更改语言时,横幅页面会以旧语言重新加载。
    • 使用 PRG(后重定向获取)模式。选择一种语言应该会导致一个 POST 请求。应该设置 cookie 并返回重定向的操作处理。如果用户需要回到同一个页面,那么重定向到同一个页面,但是你需要重定向。这将导致用户的浏览器对该页面发出新的 GET 请求,cookie 将被传递到该页面。不要简单地直接返回视图。这就是你的问题所在。
    • 很遗憾我不能使用 PRG。在我的情况下,有人使用法语(fr)语言,他访问website.com/en/stuff。我知道有人想看英文网站,所以我更新了 cookie。但是我并不总是在 url 中有语言参数,所以前端人员最好从 cookie 中读取数据(ofc 它是简化的)。如果有人点击“查看英文”按钮,我正在使用 PRG 模式。
    猜你喜欢
    • 2021-06-14
    • 2019-03-21
    • 1970-01-01
    • 1970-01-01
    • 2020-03-09
    • 1970-01-01
    • 2021-07-20
    • 2019-10-21
    • 2021-03-15
    相关资源
    最近更新 更多