Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/262.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 禁止在注销后显示以前的页面_Php_Button_Logout_Back - Fatal编程技术网

Php 禁止在注销后显示以前的页面

Php 禁止在注销后显示以前的页面,php,button,logout,back,Php,Button,Logout,Back,我正在使用PHP应用程序,但我遇到了一个问题,事实上,当用户注销并在注销浏览器的“后退”按钮后按下时,他可以看到上一页,就好像会话没有被破坏一样:((我已经尝试了我在这里和web上找到的所有内容,但都不起作用:)( 我可以禁用后退按钮吗?编辑:编辑之前-由OP以外的人进行-此问题询问是否可以禁用浏览器的后退按钮。我对该问题的原始回答如下。此外,我觉得我需要澄清-以下是基本上“中断”的方法“后退”按钮不是我推荐的或类似的方法。在使用“后退”按钮等基本浏览器功能时,您应该设计您的应用程序,以便做出明

我正在使用PHP应用程序,但我遇到了一个问题,事实上,当用户注销并在注销浏览器的“后退”按钮后按下时,他可以看到上一页,就好像会话没有被破坏一样:((我已经尝试了我在这里和web上找到的所有内容,但都不起作用:)(

我可以禁用后退按钮吗?

编辑:编辑之前-由OP以外的人进行-此问题询问是否可以禁用浏览器的后退按钮。我对该问题的原始回答如下。此外,我觉得我需要澄清-以下是基本上“中断”的方法“后退”按钮不是我推荐的或类似的方法。在使用“后退”按钮等基本浏览器功能时,您应该设计您的应用程序,以便做出明智的反应,而不是试图阻止它们的使用


您不能禁用用户浏览器上的“后退”按钮。这是浏览器的一项基本功能,不能被覆盖

您可以使应用程序中断(显示错误消息,要求用户重新开始或重新提交请求)如果用户返回。这样做是个坏主意,因为这实际上是承认在设计应用程序时没有考虑返回按钮。每个应用程序,即使是订单、购物车等,如果设计正确,都应该能够使用返回按钮

我见过的一种中断后退按钮使用的方法是在应用程序和每个表单中的每个URL上传递令牌。令牌在每个页面上重新生成,一旦用户加载新页面,以前页面中的任何令牌都将失效

当用户加载一个页面时,该页面将仅在向其传递了正确的令牌(上一页上的所有链接/表单都有该令牌)的情况下显示

我的银行提供的网上银行应用程序是这样的。如果你使用后退按钮,就不会有更多的链接,也不会有更多的页面重新加载。相反,你会看到一个通知,告诉你不能返回,你必须重新开始


也就是说,我应该提醒你,让你的应用程序在用户返回时中断是一个坏主意,并且显示出糟糕的应用程序设计。

你正在清除用户的缓存/会话吗?即使他们回击,我认为如果你在注销时清除他们的会话,也不应该让他们保持登录。

你不能禁用返回功能按钮。如果可以看到以前注销的用户页面,则会话检查脚本在某个地方失败。在提交注销表单时使用过程脚本,然后将当前注销的用户重定向到主页(如果适用).

您不能。浏览器缓存页面,因此他们不必在每次加载页面时都从web服务器请求。当您单击“上一步”按钮时,它会加载最后一个页面,而不询问服务器。

这可能与您在每次页面请求时发送回的缓存标题有关。您的内容只在短时间内有效因此,您需要确保在生成页面时返回页眉,告知浏览器不要在本地缓存

此处禁用页面缓存的示例:

总结:

浏览器后退按钮–防止注销后显示以前的页面–基于Cookie的方法 Priyakant Patel于2014年9月23日发布-请留言 禁止在注销后显示以前的页面

客户端浏览器应用程序出于性能原因缓存页面。在这种情况下,当用户单击“上一步”(浏览器后退按钮)时,它会显示缓存中的上一页

案例1:用户仍在登录

可以显示上一页的内容

案例2:用户已注销

下一个用户可能会单击“浏览器后退”按钮,查看上一页的内容

在许多应用程序中,这可能是一个大问题。在金融应用程序中,下一个潜在用户可以看到金融数据。或医疗/患者相关应用程序,这可能违反HIPAA,公司可能面临重大处罚

那么让我们回到正题,我们如何解决这个问题呢

我建议采用基于HTTP Cookie的方法

步骤:

从服务器端创建具有滑动过期的HTTP Cookie。可以从客户端JavaScript访问该Cookie(注意:浏览器在过期时清除此Cookie)。
注销时清除此cookie
如果找不到此Cookie,请重新加载页面。在这种情况下,服务器将重新验证页面,如有必要,它将重定向到登录页面
就这样,完成了

这是我使用ASP.NET的实现。实现会因服务器技术而异,但想法不变

  • (服务器端)。使用滑动过期从服务器端创建HTTP Cookie

    Response.SetCookie(new HttpCookie(“TimeoutCookieName”, "1") { Expires = DateTime.UtcNow.AddMinutes(10) });
    //NOTE 10 == Session Timeout. This will be same as your application login session timeout.
    
  • (服务器端)。注销时清除此cookie

    Response.SetCookie(new HttpCookie(“TimeoutCookieName”, "1") { Expires = DateTime.UtcNow});
    
  • (客户端):(以下脚本必须紧跟在BODY标记之后)

    window.preventBackButton=函数(){
    试一试{
    if(document&(!document.cookie | document.cookie.indexOf(“'u tc=1')<0)){
    window.document.body.style.display='none';window.location=window.location;
    }
    }捕获(e){}
    };
    window.preventBackButton();//在body标记之后立即调用
    
  • 请按以下方式查找ASP.NET实现:

    ////C# Helper class - Start
    using System;
    using System.Web;
    
    namespace MyHelpers {
        public static class MyHtmlHelper {
            public const string TimeoutCookieName = "_tc";
    
            public static HtmlString PreventBackButtonScript(HttpResponseBase response) {
                response.SetCookie(new HttpCookie(TimeoutCookieName, "1") { Expires = DateTime.UtcNow.AddMinutes(10) });
                var clientScript = "window.-reventBackButton = function() {
                    try {
                        if(document && (!document.cookie || document.cookie.indexOf('" + TimeoutCookieName + "=1') < 0)) {
                            window.document.body.style.display='none'; window.location = window.location;
                        }
                    } catch(e) {}
                };
                window.preventBackButton();";
    
                return new HtmlString(clientScript);
            }
    
            public static void SafeUnSetTimeoutCookie(this HttpResponseBase response) {
                response.SetCookie(new HttpCookie(TimeoutCookieName, "0") { Expires = DateTime.UtcNow.AddYears(-5) });
            }
        }
    }
    ////C# Helper class - End
    //Shared\_Layout.cshtml
    //Make sure not to include after logout OR login page
    <html>
    <body>
    @MyHelpers.MyHtmlHelper.PreventBackButtonScript(Response)
    .
    .
    <⁄body>
    <⁄html>
    
    ///C#Helper类-开始
    使用制度;
    使用System.Web;
    命名空间MyHelpers{
    公共静态类MyHtmlHelper{
    public const string TimeoutCookieName=“\u tc”;
    公共静态HtmlString PreventBackButtonScript(HttpResponseBase响应){
    SetCookie(新的HttpCookie(TimeoutCookieName,“1”){Expires=DateTime.UtcNow.AddMinutes(10)});
    var clientScript=“window.-reventBackButton=function(){
    试一试{
    if(document&(!document.cookie | | document.cookie.indexOf('“+TimeoutCookieName+”=1')<0)){
    window.document.body.style.displa
    
    window.preventBackButton = function () {
        try {
            if (document && (!document.cookie || document.cookie.indexOf('_tc=1') < 0)) {
                window.document.body.style.display = 'none'; window.location = window.location;
            }
        } catch (e) { }
    };
    window.preventBackButton(); //Call immediately after body tag
    
    ////C# Helper class - Start
    using System;
    using System.Web;
    
    namespace MyHelpers {
        public static class MyHtmlHelper {
            public const string TimeoutCookieName = "_tc";
    
            public static HtmlString PreventBackButtonScript(HttpResponseBase response) {
                response.SetCookie(new HttpCookie(TimeoutCookieName, "1") { Expires = DateTime.UtcNow.AddMinutes(10) });
                var clientScript = "window.-reventBackButton = function() {
                    try {
                        if(document && (!document.cookie || document.cookie.indexOf('" + TimeoutCookieName + "=1') < 0)) {
                            window.document.body.style.display='none'; window.location = window.location;
                        }
                    } catch(e) {}
                };
                window.preventBackButton();";
    
                return new HtmlString(clientScript);
            }
    
            public static void SafeUnSetTimeoutCookie(this HttpResponseBase response) {
                response.SetCookie(new HttpCookie(TimeoutCookieName, "0") { Expires = DateTime.UtcNow.AddYears(-5) });
            }
        }
    }
    ////C# Helper class - End
    //Shared\_Layout.cshtml
    //Make sure not to include after logout OR login page
    <html>
    <body>
    @MyHelpers.MyHtmlHelper.PreventBackButtonScript(Response)
    .
    .
    <⁄body>
    <⁄html>