我点击后退按钮,为什么之前填写的东西不见

这是因为你使用了session. 
解决办法:

PHP代码:--------------------------------------------------------------------------------

<?php  
session_cache_limiter(\'禁用词语, must-revalidate\'); 
session_start();  
........... 
.......... 
?>

  • session_cache_limiter(private,must-revalidate)是什么意思

    表义一:

    指定会话页面所使用的缓冲控制方法:
    当session_cache_limiter('private')时,用处是让表单history.go(-1)的时候,填写内容不丢失!就避免页面失效的警告!

    表义二:

    这个会话与header('cache-control:private,must_revalidate');效果相同

但是要值得注意的是session_cache_limiter()方法要写在session_start()方法之前才有用;

支持页面回跳详解,session_cache_limiter()的使用详解

现在表单的填写,我们可以用AJAX对用户随时进行验证,进行友好的提示,但是在用户没有留意AJAX友好提示,提交了错误的表单,跳回原页,而填写的信息却全部丢失了。要支持页面回跳,有以下的办法:

  • 1.使用session_cache_limiter方法:
  1. session_cache_limiter('private,must-revalidate');
session_cache_limiter('private,must-revalidate');

但是要值得注意的是session_cache_limiter()方法要写在session_start()方法之前才有用;

  • 2.用header来设置控制缓存的方法:

在开发过程中,往往因为表单出错而返回页面的时候填写的信息都不见了,为了支持页面回跳,可以通过两种方法实现。

第一,使用Header方法设置消息头Cache-control 
引用:
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消息的值,那么客户机可以接收超出超时期指定值之内的响应消息。

关于表单刷新

问:为什么我在点击浏览器的后退按钮后,所有字段的信息都被清空了?

答:这是由于你在你的表单提交页面中使用了 session_start 函数。该函数会强制当前页面不被缓存。解决办法为,在你的 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_start();前加上 session_cache_limiter('private,max-age=10800');

获得/设置当前缓存限制

函数原型
string session_cache_limiter ([string cache_limiter])

session_cache_limiter() 返回当前缓存限制的名字. 如果指定了 cache_limiter, 当前的缓存限制的名字被改为新值.

缓存限制控制着 HTTP 头发送到客户端的缓存控制. 这些确定页面内容规则的头内容可以被缓存.如果设置缓存设置为没有缓存(nocache), 将不允许任何客户端缓存. 但是公共变量可以允许缓存. 他也可以设置为私有的,这个比公共的多一点限制.

缓存显示在请求开始时被重新设置为 session_cache_limiter 的默认值.这样,你需要在每次请求时调用 session_cache_limiter() for every request (在 session_start() 调用前).

Example 1. session_cache_limiter() examples

<?php

# set the cache limiter to ’private’

session_cache_limiter(’private’);<br>$cache_limiter = session_cache_limiter();

echo "The cache limiter is now set to $cache_limiter<p>";<br>?><br>

注意: 这个函数在 PHP 4.0.3 里加入.

1,如何设置长生命期的session ?
将 session.cookie_lifetime ,session.gc_maxlifetime 的时间设置长一点。

2,为什么初始化session的时候报错?
a,检查session文件的存储路径,路径是否对,操作权限是否够
b,检查session初始化之前是否有html 内容输出

3,客户端在禁止使用cookie的时候,session会有影响吗?
当客户端的cookie拒绝使用的情况下。将会带来很多的一些的不方便:
php 会自动在页面的链接和表单等地方添加sessionId参数。以保证会话的
继续,但是这个时候,在一个浏览器上多次手工输入一样地址,session
会认作为多次会话而不是一次。

实验:

sessiona.php:

<?php
session_start();
$_SESSION['name']='admin';
echo "这个页面获取的session为:".$_SESSION['name'];
?>

sessionb.php

<?php

session_start();
echo "看这里是否获取到session的值:".$_SESSION['name'];

禁用cookies后,会显示:

Notice: Undefined index: name in F:\xampp\htdocs\php\sessionTest\sessionb.php on line 4

PHP中的session在默认情况下是使用客户端的Cookie来保存session id的,所以当客户端的cookie出现问题的时候就会影响session了。但是Session并不完全依赖Cookie,它还可以通过URL Get传递session id的。这需要你将php.ini中session.use_trans_sid = 1,这表示允许SessionID通过URL明文传输,既然GET可以,那么POST传递session id我觉得也可以吧。
好,这样,把上面sessiona.php和sessionb.php改造下就可以使用sesson了:

<?php
session_start();
$_SESSION['name']='admin';
echo "这个页面获取的session为:".$_SESSION['name'];
?>
<a href="sessionb.php?<?php print session_name()?>=<?php print session_id()?>">另一个页面 </a>

session_name默认为PHPSESSIONID

sessionb.php

<?php
session_id($_GET['PHPSESSID']);
session_start(); echo "看这里是否获取到session的值:".$_SESSION['name'];
session_id($_GET['PHPSESSID']);不要也可以正常访问
最后说明:
php.ini 中 SESSION 的配置
session.use_only_cookies = 1; // 开启仅使用cookies存放会话id
session.use_trans_sid = 1; // 允许SessionID通过URL明文传输

在这种情况下虽然已经允许了SessionID通过URL明文传输,担是同时又开启了仅使用cookies存放会话SessionID,所以在URL中明文传输的PHPSESSIONID参数值是无效的,SESSION不能用。
php.ini 中 SESSION 的配置
session.use_trans_sid = 0; // 禁止SessionID通过URL方式明文传输

SESSION 不能用, 这是最这安全的做法,也是php.ini 的默认配置

参考:http://www.phpddt.com/php/cookie-session.html

4,为什么我的session 过几分钟就失效了?
1,检查浏览器的cookie 是否启用,如果没有启用的话检查
系统是否允许使用url传递sessionID,最后检查url_rewriter.tags设置
2,检查session的垃圾标识时间,和回收概率

5,如何将我的session 存储在数据库内?
利用session_set_save_handler("open", "close", "read", "write", "destroy", "gc")
定制自己的处理方式。

6,如何利用session 得到当前的用户数量和列表?
如果将session存储在数据库内,就会很容易实现,但是不管用什么
方式得到的数据不一定是精确数据。

7,为什么我填写的表单在后退之后内容就不见了?
检查脚本内有没有初始化session的动作,如果有的话,使用:
session_cache_limiter('private, must-revalidate');

6,如何利用session来控制网页的缓存?
调整session.cache_limiter ,session.cache_expire

8,我用session管理会话,如果同一个帐户在两台机器上同时登陆会有影响吗?
不会有影响。因为这是两个sessionID.也就是说服务器上有两个session文件
来保证各自的会话。

 php session id函数具体代码可以查看源代码:http://bbs.chinaunix.net/forum.php?mod=viewthread&tid=3583605
 

session_cache_limiter 及 session 常见问题的更多相关文章

  1. PHP之session相关实例教程与经典代码

    ·php 中cookie和session的用法比较 ·phpmyadmin报错:Cannot start session without errors问题 ·php中cookie与session应用学 ...

  2. 【Distributed】分布式Session一致性问题

    一.概述 1.1 什么是Session 1.2 Session实现原理 1.3 Session常见问题 Session 保证在那里? 关闭浏览器Session会失效吗 服务器集群之后,Session产 ...

  3. php分享十七:http状态码

    一:http状态码 (200,301,302,304,305,400,401,403,404,500,501,502,503,504) HTTP状态码(HTTP Status Code)是用以表示网页 ...

  4. java网络通信:HTTP协议 之 Sessions与Cookies

    通过前一篇博客的讲解,我们大体知道了HTTP协议是什么,它有什么组成,以及它的工作原理,那么在HTTP的很多特点中,有一点叫做,无状态,就HTTP是一个无状态的协议,如果需要前面的信息用于处理后边的请 ...

  5. 比培训机构还详细的 Python 学习路线,你信吗 0^0

    前言 这其实是将自己写的文章进行一个总结分类,并不代表最佳学习路线 会不断更新这篇文章...没链接的文章正在编写ing...会不会哪天我的这个目录就出现在培训机构的目录上了... 目前实战比较少(要是 ...

  6. WCF常见问题(1) -- WebService/WCF Session Cookie

    原文:WCF常见问题(1) -- WebService/WCF Session Cookie 在.net 3.0推出WCF之前使用的WebService,有的应用有使用Session保持一些信息,在不 ...

  7. web 开发常见问题--Session 与 Cookie 却别

    总结: 1.首先,session与cookie都是保存数据的,存在的原因很大程度上是为了解决HTTP协议的无状态特性 2.都是保存数据,却别在于cookie保存在客户端,由浏览器管理,session保 ...

  8. MIS性能优化常见问题与方案(辅助项目组性能优化的总结贴)

    最近帮忙公司的几个项目组进行了不同方面的性能优化,发现几个项目都出现了一些共性的问题.这里写一篇文章,总结一下这几类问题,以及其对应的解决方案.方便其它项目组参考.   常见问题一:打开页面非常慢,有 ...

  9. JMeter常见问题集合

    前言 本文内容仅仅是针对Jmeter的部分功能名词的介绍和解释,以及初学者不易理解的问题的整理.部分内容来自别人做的整理,为了更好地整理自己的思路,所以可耻的整理一下发到博客上. 标题[1-6]和[参 ...

随机推荐

  1. mybatis第一个入门demo

    学习框架技术,一般先写个demo,先知道是什么,然后在知道为什么,这也是进步的一种. 源码链接:http://pan.baidu.com/s/1eQJ2wLG

  2. UESTC_秋实大哥与小朋友 2015 UESTC Training for Data Structures<Problem A>

    A - 秋实大哥与小朋友 Time Limit: 3000/1000MS (Java/Others)     Memory Limit: 65535/65535KB (Java/Others) Sub ...

  3. Contains Duplicate II 解答

    Question Given an array of integers and an integer k, find out whether there are two distinct indice ...

  4. curl 浏览器模拟请求实战

    1,curl 常用选项

  5. c#将输入的人民币数字金额转换成小写

    //// <summary> /// 人民币大小写金额转换 /// </summary> class RMBCapitalization { private const str ...

  6. POJ 1987 Distance Statistics(树的点分治)

      转载请注明出处,谢谢http://blog.csdn.net/ACM_cxlove?viewmode=contents    by---cxlove 上场CF的C题是一个树的分治... 今天刚好又 ...

  7. C语言头文件组织

    一.全局变量单独编写(很值得借鉴). 一般习惯将不同功能模块放到一个头文件和一个C文件中. 例如是写一些数学计算函数: //mymath.h #ifndef _mymath_H #define _my ...

  8. 有关docker新版的icc、iptables的一个巨坑

    之前玩过docker的icc=false.iptables=true 按照这两个参数配置之后,想指定两个特定的容器通讯,直接用--link即可. 但最近我在下载了1.12新版的docker,这个不奏效 ...

  9. 自定义view(自定义view的时候,三个构造函数各自的作用)

    package com.timeshare.tmband.Utils; import android.content.Context; import android.content.res.Typed ...

  10. SERVERPROPERTY方法说明

    SERVERPROPERTY 返回有关服务器实例的属性信息. 语法 SERVERPROPERTY ( propertyname ) 参数 propertyname 是包含要返回的服务器属性信息的表达式 ...