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之前管用,这一天 ...
随机推荐
- [0406]学习一个——Unit 1 Html、CSS与版本控制
前言 最近发现了Github的Student认证,本来想用来注册Digital Ocean搭个梯子,结果注册验证不能用VISA借记卡=~=. 那么在这漫长的清明节假期里,只有学习能满足空虚的内心(划掉 ...
- SAP应用创新-维护控制表、视图统一路径
SAP应用创新-维护控制表.视图统一路径 背景: Sap 里面通过技术支持人员维护表的值控制业务操作的表不少,一般通过事物代码或记录在系统外的文档或在某个程序上放置一个按钮.缺点:分散,不易记,不好找 ...
- Nginx教程---01.Nginx入门
create by 三七二十一 LZ参考视频(年代久远,但万变不离其宗): 链接:https://pan.baidu.com/s/1O_MmN0c3ckM6vbk08n8Qkg 密码:z9zr 01_ ...
- git 恢复单个文件的历史版本
首先查看该文件的历史版本信息:git log Default@2x.png 记录下需要恢复的commit版本号:如 9aa51d89799716aa68cff3f30c26f8815408e926 恢 ...
- go 多态
demo1 // Sample program to show how polymorphic behavior with interfaces. package main import ( &quo ...
- modal结合art-template
内容div <div id="modal-cont"></div> 模板tpl <script id="modal-tpl" ty ...
- [转]jsbsim基础概念
转自: 么的聊链接:https://www.jianshu.com/p/a0b4598f928a 虽然用户不需要掌握太多 JSBSim 飞行模拟器的细节,但是了解 JSBSim 的基本工作流程也会对学 ...
- QT5 解决QSqlDatabase: QMYSQL driver not loaded 问题
QT版本 Qt 5.12.0 MySQL版本 8.0.13 转到MySQL的安装目录 G:\mysql-8.0.13-winx64\mysql-8.0.13-winx64\lib 将安装目录下的两个文 ...
- php递归方法
<?phpheader("Content-type:text/html;charset=utf-8");$city=array( array('id'=>1,'name ...
- c# 读取txt方法
string strLine; try { FileStream aFile = new FileStream("Log.txt", FileMode.Open); StreamR ...