2017-4-12/session
1. session的原理。
《PHP核心技术与最佳实践》P299
session通过一个称为PHPSESSIONID的cookie和服务器联系。session通过sessionID判断客户端用户的,即session文件的文件名。
sessionID按照一定的算法生成,包含在HTTP Request里,通过保证唯一性和随机性来确保session的安全。如果没有设置session的生存周期,sessionID存在内存中,关闭浏览器后该ID会自动注销,重新请求该页面的时候会重新注册一个sessionID。
如果客户端没有禁用cookie,cookie在启动session会话的时候会存储sessionID和session生存期。如果客户端禁用了cookie,所有的生存周期都是浏览器进程,只要关闭浏览器了,再次请求页面的时候又要重新注册session。
当程序需要为某个客户端的请求创建一个session的时候,服务器首先检查这个客户端的请求里是否已包含了一个sessionID,如果已包含一个sessionID则说明以前已经为此客户端创建过session,服务器就按照sessionID把这个session检索出来使用;如果客户端请求不包含sessionID,则为此客户端创建一个session并且生成一个与此session相关联的sessionID,这个sessionID将被在本次响应中返回给客户端保存。
2. session的过期策略。
session 其实就是基于时间的一种缓存,它有一个最近访问时间,用户每访问一次,session里面的最近访问时间就更新一次。如果当前时间减去最近访问时间大于三十分钟(这个时间可以设置),这个session就会被移除掉,进而失效。
3. session的数据结构
session目录保存路径在php.ini配置文件里面,可自行指定session的保存位置(设置完成后需要重启服务方可生效),如:
session.save_path = "D:\xampp\tmp"
可以用以下代码测试session目录路径是否设置成功:
$session_path = session_save_path();
if (strpos($session_path, ";") !== FALSE) {
$session_path = substr($sessionpath, strpos($sessionpath, ";")+1);
}
//获取当前session的保存路径
echo $session_path;
要使用 session ,都需要初始化 session_start();
<?php
//1.初始化session
session_start();
//2.保存数据
$_SESSION['name'] = "liulu";
//session文件中可以保存double,inerger,bool,array,object;
$_SESSION['age'] = 26;
$_SESSION['gender'] = "female";
$address = array("BeiJing","FunHill");
$_SESSION['address'] = $address;
//保存一个对象到session文件
echo "success!";
运行上述代码后,可以看到session目录里生成一个session文件,打开该文件,其内容为
name|s:5:"liulu";age|i:26;gender|s:6:"female";address|a:2:{i:0;s:7:"BeiJing";i:1;s:7:"FunHill";}
4. session怎么做到高可靠呢?假如一台机器挂了怎么办?
对于访问量大的站点,较优的方法是用DataBase(普通数据库、内存表、APC等)存取session。MEMORY引擎采用内存表,所有数据都存储在内存,操作速度快,适用于session这样的数据。
但在大流量的网站中,session入库的效率不高,且占据数据库的connection资源,因此可以使用Memcached、Redis等nosql数据库来实现高并发、大流量的session存储。
2017-4-12/session的更多相关文章
- python最全学习资料:python基础进阶+人工智能+机器学习+神经网络(包括黑马程序员2017年12月python视频(百度云链接))
首先用数据说话,看看资料大小,达到675G 承诺:真实资料.不加密,获取资料请加QQ:122317653 包含内容:1.python基础+进阶+应用项目实战 2.神经网络算法+python应用 3.人 ...
- 2017.10.12 Java的计数器的开发
//我们用一个合成的applet/application来简单显示出一个计数器的结果/** * Created by qichunlin on 2017/10/12. */ /*简单的计数器*/ im ...
- 通用Mapper新特性:ExampleBuilder 2017年12月18日
package tk.mybatis.mapper.test.example; import org.apache.ibatis.session.SqlSession; import org.juni ...
- ISSCC 2017论文导读 Session 14 Deep Learning Processors,A 2.9TOPS/W Deep Convolutional Neural Network
最近ISSCC2017大会刚刚举行,看了关于Deep Learning处理器的Session 14,有一些不错的东西,在这里记录一下. A 2.9TOPS/W Deep Convolutional N ...
- ISSCC 2017论文导读 Session 14 Deep Learning Processors,A 2.9TOPS/W Deep Convolutional Neural Network SOC
最近ISSCC2017大会刚刚举行,看了关于Deep Learning处理器的Session 14,有一些不错的东西,在这里记录一下. A 2.9TOPS/W Deep Convolutional N ...
- ISSCC 2017论文导读 Session 14:ENVISION: A 0.26-to-10 TOPS/W Subword-Parallel DVAFS CNN Processor in 28nm
ENVISION: A 0.26-to-10 TOPS/W Subword-Parallel Dynamic-Voltage-Accuracy-Frequency-Scalable CNN Proce ...
- ISSCC 2017论文导读 Session 14 Deep Learning Processors,DNPU: An 8.1TOPS/W Reconfigurable CNN-RNN
转载请注明,本文出自Bin的专栏http://blog.csdn.net/xbinworld,谢谢! DNPU: An 8.1TOPS/W Reconfigurable CNN-RNN Process ...
- 2017.4.12 开涛shiro教程-第十八章-并发登录人数控制
原博客地址:http://jinnianshilongnian.iteye.com/blog/2018398 根据下载的pdf学习. 开涛shiro教程-第十八章-并发登录人数控制 shiro中没有提 ...
- 2017.3.12 H5学习的第一周
本周我开始了H5的学习,在这一周里我们从html的基本标签开始一直讲到了才算css的用法,接下来我将记录下来本周我学到的H5的内容. 首先是声明文档,声明文档类型是HTML5文件,它在HTML文档必不 ...
- 微信公众号的分享接口,分享提示config:fail,invalid signature的解决办法(2017年12月)
微信中打开网页,使用微信右上角菜单中自带的分享功能的经历及总结: 最开始,微信分享页面时,直接读取页面的标题(title)和页面中的第一张符合条件的图片[此种方式在2017-03-29之前管用,这一天 ...
随机推荐
- facebook api之Marketing API
General information on the Marketing APIs, access, versioning and more. The main use cases for the M ...
- tomcat启动出现Preparing launch delegate,一直卡在100%
本地启动项目时,Tomcat一直停留在, Starting Tomcat V8.0 Server at localhost Preparing launch delegate... 百度可得 ...
- HDU 5583 Kingdom of Black and White(暴力)
http://acm.hdu.edu.cn/showproblem.php?pid=5583 题意: 给出一个01串,现在对这串进行分组,连续相同的就分为一组,如果该组内有x个数,那么就对答案贡献x* ...
- 【BZOJ】1052: [HAOI2007]覆盖问题
题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=1052 大概自己YY了个贪心然后过了... 二分答案,考虑如何check: 找到一个最小的矩 ...
- 冒烟测试(smoke testing)
冒烟测试(smoke testing),就是开发人员在个人版本的软件上执行目前的冒烟测试项目,确定新的程序代码不出故障.冒烟测试的对象是每一个新编译的需要正式测试的软件版本,目的是确认软件基本功能正常 ...
- Python self,init,对象属性
self关键字的作用 __init__初始化 # coding=utf-8 支持中文 class Human(object): laugh = 'Ha' def show_laugh(self): p ...
- Algorithm 算法基础知识(未完成
基础概念不讲,记录课上关键部分 时间复杂度(Time Complexity) 算法所需要花的时间 比较时间复杂度(主要看问题的规模) 时间频度(算法执行次数)T(n)和T(n1),如果两个时间频度为等 ...
- [转]xml解析工具的效率比较QDomDocument、TinyXml-2、RapidXml、PugiXml
转自:http://www.itdaan.com/blog/2017/02/20/301ad47832f4.html 由于windows环境下测试不稳定,博主选择在linux下进行的测试! Qt - ...
- Spring Bean后置处理器
本例子源于:W3CSchool,在此作记录 Bean 后置处理器允许在调用初始化方法前后对 Bean 进行额外的处理. BeanPostProcessor 接口定义回调方法,你可以实现该方法来提供自己 ...
- 力扣(LeetCode)461. 汉明距离
两个整数之间的汉明距离指的是这两个数字对应二进制位不同的位置的数目. 给出两个整数 x 和 y,计算它们之间的汉明距离. 注意: 0 ≤ x, y < 231. 示例: 输入: x = 1, y ...