为什么 Response.Cache.SetNoStore() 在派生自 System.Web.UI.Page 的类中不起作用

发布于 2024-11-10 06:18:49 字数 1145 浏览 4 评论 0原文

作为我工作的一部分,我在注册网站上工作,并且出现了我尝试将其外包给中央 BasePage DLL 的模式。在这里,我过去创建了有用且可重用的方法,例如帮助发送电子邮件的方法和 Ninject 的依赖注入设置。

注意到 BasePage 是我添加到网站的引用可能会很有用。

在本例中,我希望会话过期,以便当有人使用浏览器返回事件时,委托人无法重新提交他们的信息。

我使用的代码是:

        // Stop Caching in IE
        Response.Cache.SetCacheability(System.Web.HttpCacheability.NoCache);

        // Stop Caching in Firefox
        Response.Cache.SetNoStore();

它有效,所以我认为在我的 BasePage 类中有一个方法会很有用,我可以调用该方法来禁用缓存,并减少在页到一行。

问题是,我认为这部分与 BasePage 是一个引用的 DLL 这一事实有关,如果我使用来自 BasePage dll 的方法调用,则不会禁用缓存。

有谁知道是否有一种方法可以使用从我的 BasePage dll 调用此方法来禁用页面上的缓存,或者我是否必须将其保留在网站本地?

更新07/07

发现了一些有趣的东西。

一些站点建议使用会话变量来确定某人是否返回该页面。如果是您,则转到停止页面。

您需要 noCache 以便页面重新触发 Page_Load 事件

但我还发现:我有一个包含上述代码的页面,但我有一个自定义验证必须访问服务器进行验证并返回验证错误。更正后,使该值有效,然后再次提交。按返回表示该页面已过期。

因此,如果我更改所有验证,使 EnableClientScript 为 false,则任何错误都会导致网络服务器在成功提交后在后退按钮事件上超时。

这并不能完全解决这个问题,但它会阻止人们在输入无效值的特定情况下进行回击。

干杯

卢克

I work on registration sites as part of my job and patterns appear that I try and farm out to a central BasePage DLL. Here I have created useful and reusable methods in the past, Such as methods to help sending emails and Dependency Injection setups for Ninject.

It might be useful to note that BasePage is a reference that I add to a website.

In this case, I wanted the session to expire, so that when someone uses the browser back event a delegate cannot resubmit their information.

The code I use is:

        // Stop Caching in IE
        Response.Cache.SetCacheability(System.Web.HttpCacheability.NoCache);

        // Stop Caching in Firefox
        Response.Cache.SetNoStore();

It works, so I thought that it would be useful to have a method in my BasePage class that I could call to Disable the cache, and reduce the call to do this in the page to one line.

The problem is, I think this is partly to do with the fact BasePage is a referenced DLL, if I use the method call from my BasePage dll the cache is not disabled.

Does anyone know if there is a way I can use a call this method from my BasePage dll to disable the cache on a page, or do I have to keep it local to the website?

UPDATE 07/07

Have found something interesting.

Several sites suggest using a session variable to determine if someone is returning to the page. if they are you then fire off to a halt page.

You need the noCache so that the page refires the Page_Load event

But I have also found: I have a page that contains the above mentioned code, but I have a custom validation that has to hit the server to validate and returns a validation error. On correcting, so that the value is valid, then submitting again. Pressing back says the page has expired.

So if I change all the validation so that EnableClientScript is false any error will cause the webserver to time out on a back button event once it has been successfully submitted.

This doesnt fix it completely, but it will stop people pressing back in a specific case of them entering an invalid value.

Cheers

Luke

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文