session_cache_limiter 及 session 常见问题
我点击后退按钮,为什么之前填写的东西不见
这是因为你使用了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方法:
- 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文件
来保证各自的会话。
session_cache_limiter 及 session 常见问题的更多相关文章
- PHP之session相关实例教程与经典代码
·php 中cookie和session的用法比较 ·phpmyadmin报错:Cannot start session without errors问题 ·php中cookie与session应用学 ...
- 【Distributed】分布式Session一致性问题
一.概述 1.1 什么是Session 1.2 Session实现原理 1.3 Session常见问题 Session 保证在那里? 关闭浏览器Session会失效吗 服务器集群之后,Session产 ...
- php分享十七:http状态码
一:http状态码 (200,301,302,304,305,400,401,403,404,500,501,502,503,504) HTTP状态码(HTTP Status Code)是用以表示网页 ...
- java网络通信:HTTP协议 之 Sessions与Cookies
通过前一篇博客的讲解,我们大体知道了HTTP协议是什么,它有什么组成,以及它的工作原理,那么在HTTP的很多特点中,有一点叫做,无状态,就HTTP是一个无状态的协议,如果需要前面的信息用于处理后边的请 ...
- 比培训机构还详细的 Python 学习路线,你信吗 0^0
前言 这其实是将自己写的文章进行一个总结分类,并不代表最佳学习路线 会不断更新这篇文章...没链接的文章正在编写ing...会不会哪天我的这个目录就出现在培训机构的目录上了... 目前实战比较少(要是 ...
- WCF常见问题(1) -- WebService/WCF Session Cookie
原文:WCF常见问题(1) -- WebService/WCF Session Cookie 在.net 3.0推出WCF之前使用的WebService,有的应用有使用Session保持一些信息,在不 ...
- web 开发常见问题--Session 与 Cookie 却别
总结: 1.首先,session与cookie都是保存数据的,存在的原因很大程度上是为了解决HTTP协议的无状态特性 2.都是保存数据,却别在于cookie保存在客户端,由浏览器管理,session保 ...
- MIS性能优化常见问题与方案(辅助项目组性能优化的总结贴)
最近帮忙公司的几个项目组进行了不同方面的性能优化,发现几个项目都出现了一些共性的问题.这里写一篇文章,总结一下这几类问题,以及其对应的解决方案.方便其它项目组参考. 常见问题一:打开页面非常慢,有 ...
- JMeter常见问题集合
前言 本文内容仅仅是针对Jmeter的部分功能名词的介绍和解释,以及初学者不易理解的问题的整理.部分内容来自别人做的整理,为了更好地整理自己的思路,所以可耻的整理一下发到博客上. 标题[1-6]和[参 ...
随机推荐
- 玩sdr的朋友们,在rtl_tcp时,记得调整rtl_AGC和tuner_AGC啊
我在rtl_tcp时没有调整这个,结果怎么也听不到声音啊 还有就是在搞rtl_tcp时,一定要网速跟得上,我用无线网络时就碰到了这个问题,声音总是一直断续着,郁闷死
- scrollbarsstyle
android:scrollbarStyle属性及滚动条和分割线覆盖问题 本文主要介绍android view的android:scrollbarStyle属性意义android:scrollbarS ...
- File类与FileInfo类
File是一个静态类,常用于文件操作,读取,修改文件等等.File类的大部分方法最终都是转换为流(Stream)的操作,只不过是.net提取帮你封装好了这些常用的流.并且会自动清理占用的资源. 例如: ...
- 几道C语言的题目!
注:编译环境 VC2010,系统WIN7 64位,其他编译环境和系统未测试 1-1. 编程,输入n,输出如下例(n=5)所示的图形: ***** ***** ***** ***** ***** # ...
- 经验:Ubuntu 登陆 L2TP VPN
Ubuntu Linux 操作系统默认支持PPTP协议的VPN登陆,但是随着网络环境的复杂化,我们需要使用L2TP协议的VPN登陆,下面,我们只需要简单的几条命令即可登陆L2TP协议的VPN. ...
- Multiple outputs from T4 made easy – revisited » DamienG
Multiple outputs from T4 made easy – revisited » DamienG Multiple outputs from T4 made easy – revisi ...
- 总结FormsAuthentication的使用
一.先看一下使用FormsAuthentication做登录认证的用法 用法一: FormsAuthentication.SetAuthCookie(username, isPersistent); ...
- 如何煉成NET架構師
微软的DotNet 开发绝对是属于那种入门容易提高难的技术.而要能够成为DotNet 架构师没有三年或更长时间的编码积累基本上是不可能的.特别是在大型软件项目中,架构师是项目核心成员,承上启下,因此 ...
- ubuntu WiFi: operation not possible due to RF-kill《转载》
Some people have been experiencing WiFi problems with Ubuntu 10.10 since an update that happend just ...
- 【高精度递推】【HDU1297】Children’s Queue
Children's Queue Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) ...