zoukankan      html  css  js  c++  java
  • PHP表单提交错误后返回内容消失问题

    今日发现一个问题,用户如果提交表单后,不符合要求返回,表单信息老是没有。把我郁闷坏了,我明明记得最开始做此功能的时候,是可以恢复表单状态的。经过网上查找,原来是由于我使用了session_start函数的原因,这个函数会强制当前页面不被刷新,解决方法就是在此函数后加入 header("Cache-control: private"),同时注意在本行之前你的PHP程序不能有任何输出。

         还有基于session的解决方法,在session_start前加上

    session_cache_limiter('nocache');// 清空表单
    session_cache_limiter('private'); //不清空表单,只在session生效期间
    session_cache_limiter('public'); //不清空表单,如同没使用session一般
    

         不过从别人博客上看到如果直接设置session会使seesion出现cache的现象,从而导致当你应用到session的地方会出现session信息不能更新的问题。

         记录于此,省得下次忘了。这也提醒了我,该时候花个时间好好的把PHP手册当教科书一样从头到尾最少看一遍。

        补充:

         第一,使用Header方法设置消息头Cache-control

        

    1 header('Cache-control: private, must-revalidate'); //支持页面回跳

        第二,使用session_cache_limiter方法

        //注意要写在session_start方法之前
     session_cache_limiter('private, must-revalidate');

    补充:
    Cache-Control消息头域说明
    Cache-Control指定请求和响应遵循的缓存机制。在请求消息或响应消息中设置Cache-Control并不会修改另一个消息处理过程中的缓存处理过程。请求时的缓存指令包括no-cache、no-store、max-age、max-stale、min-fresh、only-if- cached,响应消息中的指令包括public、private、no-cache、no-store、no-transform、must- revalidate、proxy-revalidate、max-age。各个消息中的指令含义如下:

    Public指示响应可被任何缓存区缓存。

    Private指示对于单个用户的整个或部分响应消息,不能被共享缓存处理。这允许服务器仅仅描述当用户的部分响应消息,此响应消息对于其他用户的请求无效。

    no-cache指示请求或响应消息不能缓存

    no-store用于防止重要的信息被无意的发布。在请求消息中发送将使得请求和响应消息都不使用缓存。

    max-age指示客户机可以接收生存期不大于指定时间(以秒为单位)的响应。

    min-fresh指示客户机可以接收响应时间小于当前时间加上指定时间的响应。

    max-stale指示客户机可以接收超出超时期间的响应消息。如果指定max-stale消息的值,那么客户机可以接收超出超时期指定值之内的响应消息。

  • 相关阅读:
    UVA 1386 Cellular Automaton
    ZOJ 3331 Process the Tasks
    CodeForces 650B Image Preview
    CodeForces 650A Watchmen
    CodeForces 651B Beautiful Paintings
    CodeForces 651A Joysticks
    HUST 1601 Shepherd
    HUST 1602 Substring
    HUST 1600 Lucky Numbers
    POJ 3991 Seinfeld
  • 原文地址:https://www.cnblogs.com/17too/p/1770679.html
Copyright © 2011-2022 走看看