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]和[参 ...
随机推荐
- Apache Commons Pool 故事一则
Apache Commons Pool 故事一则 最近工作中遇到一个由于对commons-pool的使用不当而引发的问题,习得正确的使用姿势后,写下这个简单的故事,帮助理解Apache Commons ...
- button元素兼容问题浅析
缺省type属性值 <button>提交</button> button元素的type属性值有submit.button可选,在上面这种没有明确指出type值的情况下,浏览器的 ...
- LeeCode(Database)-Combine Two Tables
Table: Person +-------------+---------+ | Column Name | Type | +-------------+---------+ | PersonId ...
- 【HDU 5510 Bazinga】字符串
2015沈阳区域赛现场赛第2题 题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5510 题意:给定一个由字符串组成的序列,一共n个元素,每个元素是一个不 ...
- pythonBasic
1,judgment in deciding(if...:,if..else:,if else...else:),loop(for...:,while True...:) break,continu ...
- C/C++误区四:char c = getchar();
许多初学者都习惯用 char 型变量接收 getchar.getc,fgetc 等函数的返回值,其实这么做是不对的,并且隐含着足以 致命的错误 .getchar 等函数的返回值类型都是 int 型 ...
- php 中利用json_encode和json_decode传递包括特殊字符的数据
</pre><span style="font-size:24px"></span><pre name="code" ...
- c# 高斯模糊
using System; using System.Collections.Generic; using System.Text; using System.Drawing; using Syste ...
- pt-online-schema-change解读
[用途]在线改表 [注意风险]因为涉及到修改表的数据和结构,所以在使用前要小心测试并做好备份,工具默认不会改表,除非你添加了--execute参数 [工具简介] pt-osc模仿MySQL内部的改表方 ...
- 美化select的jquery插件
自己写的一个美化select插件,浏览器自带的实在太丑,还不能用css自定义. 插件主要原理是隐藏原生的select控件,支持select上设置change事件. 脚本 /* * iSelect * ...