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之前管用,这一天 ...
随机推荐
- Twitter OAuth
新浪微博和 Twitter 的 Oauth API 为什么感觉流程不一样 新浪: 开发者引导用户到新浪授权页面, 页面链接中需要带上自己的 apikey : 用户授权后新浪跳转到开发者指定指定的页面, ...
- Kubernetes之总体了解
Kubernetes:架构.基本概念.用于总体了解 Kubernetes系列之介绍篇:优势.用途 Kubernetes核心概念总结
- eclipse创建springBoot项目
创建Spring Boot 工程 先在eclipse中安装spring -tool -suite插件,然后根据以下步骤可以创建1.新建Spring Starter Project 2.Packagin ...
- Jenkins-job迁移
摘自:http://www.cnblogs.com/topplay/p/3899330.html Jenkins迁移job 说明:从一个Jenkins服务器A将现有job迁移到另外一个Jenkins服 ...
- C#题目及答案(1)
1. 简述 private. protected. public. internal 修饰符的访问权限. 答 . private : 私有成员, 在类的内部才可以访问. protected : 保护成 ...
- jquery事件重复绑定的几种解决方法 (二)
防止事件重复绑定共有4种方法: bind().unbind()方法 live().die()方法 off().on()方法 one()方法 一.bind().unbind()方法 bind();绑定事 ...
- vue运行报错--dependency
ERROR Failed to compile with 1 errors 11:17:27 This dependency was not found: 解决方法:把报错所缺少的依赖都装上 如 xx ...
- 副本死亡传送(_instance_die_tele)
玩家在副本中死亡时,将传送至对应的坐标 mapId 副本地图ID posId 坐标ID,对应_postion中posId
- 屏幕尺寸,分辨率,像素,PPI之间到底什么关系?
转载自:http://www.jianshu.com/p/c3387bcc4f6e 感谢博主的无私分享. 今天我给大家来讲讲这几个咱们经常打交道的词到底啥意思,以及他们之间到底有什么关系.这篇文章是我 ...
- centos7 彻底卸载PHP7
[root@xxx php-memcached]# rpm -qa | grep php php70w-common--.w7.x86_64 php70w-devel--.w7.x86_64 php7 ...