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消息的值,那么客户机可以接收超出超时期指定值之内的响应消息。

  • 相关阅读:
    django调试思路
    在python中使用Mongodb
    python中Redis的简要介绍以及Redis的安装,配置
    python3.7中SQLAlchemy安装失败,报错Command errored out with exit status 1
    使用jinjia2时报错 (admin.E403) A ‘django.template.backends.django.DjangoTemplates’ instance must be configured in TEMPLATES in order to use the admin application.
    使用豆瓣API时报错invalid keyid
    Http常用状态码
    python开发工具ipython
    解析GenericOptionsParser
    Sql注入
  • 原文地址:https://www.cnblogs.com/17too/p/1770679.html
Copyright © 2011-2022 走看看