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

这是因为你使用了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. Apache Commons Pool 故事一则

    Apache Commons Pool 故事一则 最近工作中遇到一个由于对commons-pool的使用不当而引发的问题,习得正确的使用姿势后,写下这个简单的故事,帮助理解Apache Commons ...

  2. button元素兼容问题浅析

    缺省type属性值 <button>提交</button> button元素的type属性值有submit.button可选,在上面这种没有明确指出type值的情况下,浏览器的 ...

  3. LeeCode(Database)-Combine Two Tables

    Table: Person +-------------+---------+ | Column Name | Type | +-------------+---------+ | PersonId ...

  4. 【HDU 5510 Bazinga】字符串

    2015沈阳区域赛现场赛第2题 题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5510 题意:给定一个由字符串组成的序列,一共n个元素,每个元素是一个不 ...

  5. pythonBasic

    1,judgment in  deciding(if...:,if..else:,if else...else:),loop(for...:,while True...:) break,continu ...

  6. C/C++误区四:char c = getchar();

    许多初学者都习惯用 char 型变量接收 getchar.getc,fgetc 等函数的返回值,其实这么做是不对的,并且隐含着足以 致命的错误 .getchar 等函数的返回值类型都是  int  型 ...

  7. php 中利用json_encode和json_decode传递包括特殊字符的数据

    </pre><span style="font-size:24px"></span><pre name="code" ...

  8. c# 高斯模糊

    using System; using System.Collections.Generic; using System.Text; using System.Drawing; using Syste ...

  9. pt-online-schema-change解读

    [用途]在线改表 [注意风险]因为涉及到修改表的数据和结构,所以在使用前要小心测试并做好备份,工具默认不会改表,除非你添加了--execute参数 [工具简介] pt-osc模仿MySQL内部的改表方 ...

  10. 美化select的jquery插件

    自己写的一个美化select插件,浏览器自带的实在太丑,还不能用css自定义. 插件主要原理是隐藏原生的select控件,支持select上设置change事件. 脚本 /* * iSelect * ...