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的更多相关文章

  1. python最全学习资料:python基础进阶+人工智能+机器学习+神经网络(包括黑马程序员2017年12月python视频(百度云链接))

    首先用数据说话,看看资料大小,达到675G 承诺:真实资料.不加密,获取资料请加QQ:122317653 包含内容:1.python基础+进阶+应用项目实战 2.神经网络算法+python应用 3.人 ...

  2. 2017.10.12 Java的计数器的开发

    //我们用一个合成的applet/application来简单显示出一个计数器的结果/** * Created by qichunlin on 2017/10/12. */ /*简单的计数器*/ im ...

  3. 通用Mapper新特性:ExampleBuilder 2017年12月18日

    package tk.mybatis.mapper.test.example; import org.apache.ibatis.session.SqlSession; import org.juni ...

  4. 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 ...

  5. 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 ...

  6. 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 ...

  7. 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 ...

  8. 2017.4.12 开涛shiro教程-第十八章-并发登录人数控制

    原博客地址:http://jinnianshilongnian.iteye.com/blog/2018398 根据下载的pdf学习. 开涛shiro教程-第十八章-并发登录人数控制 shiro中没有提 ...

  9. 2017.3.12 H5学习的第一周

    本周我开始了H5的学习,在这一周里我们从html的基本标签开始一直讲到了才算css的用法,接下来我将记录下来本周我学到的H5的内容. 首先是声明文档,声明文档类型是HTML5文件,它在HTML文档必不 ...

  10. 微信公众号的分享接口,分享提示config:fail,invalid signature的解决办法(2017年12月)

    微信中打开网页,使用微信右上角菜单中自带的分享功能的经历及总结: 最开始,微信分享页面时,直接读取页面的标题(title)和页面中的第一张符合条件的图片[此种方式在2017-03-29之前管用,这一天 ...

随机推荐

  1. Docker:Service

    Prerequisites Install Docker version 1.13 or higher. Get Docker Compose. On Docker for Mac and Docke ...

  2. 【转】myeclipse 自定义视图Customize Perspective 没有反应

    官网查了下,解释如下:   附上链接https://www.myeclipseide.com/PNphpBB2-viewtopic-t-30151.html,大概意思是按如下图所示步骤更新即可.读者可 ...

  3. Python Scrapy安装

    直接安装scrapy 各种报错,后来各种百度终于解决了,如下是亲身的经历. pip install scrapy 这样直接会报错. 第一步: 先安装wheel pip install wheel 第二 ...

  4. java中List,Set,Map用法以及区别

    List,Set,Map是否继承自Collection接口? 答:List,Set是,Map不是. Collection是最基本的集合接口,一个Collection代表一组Object,即Collec ...

  5. SpringBoot学习路线

    网上也有很多github资源,都是自己学习Spring Boot时候,自己练的代码 虽然现在最新的版本用2.1.3.RELEASE版本,以前版本的demo运行可能会遇到错误.但是有总比没有要好,不是么 ...

  6. nodejs项目安装ant design

    1.确保安装好nodejs $ node --version v10.4.1 2.确保npm $ npm -v 6.1.0 3.安装 $ sudo npm install antd-init -g / ...

  7. JavaSE 字符串和正则表达式

    根据不懂的自己整理一下,跟着老师进度刷一遍课本,记录琐碎不懂知识 1.StringTokenizer类 String[] mess= {"整数部分","小数部分" ...

  8. L2-019. 悄悄关注

    说真的,看了一些L2题明白多学点库函数是多么重要!!!! 会map这题直接水过,map用法不解释自己学,代码如下: #include<bits/stdc++.h> using namesp ...

  9. [原][粒子特效][spark]插值器interpolator

    深入浅出spark粒子特效连接:https://www.cnblogs.com/lyggqm/p/9956344.html 插值器是体现粒子生命周期变化的功能 group使用到插值器的方式: 可以看到 ...

  10. ionic+微信js-sdk集成初步融合,在子路由页引入js操作dom节点

    .controller('yaoheCtrl',['$scope',function ($scope) { $scope.$watch('$viewContentLoaded',function(ev ...