Session应该算是一个在项目开发中应用的比较多的个功能,用以跟踪用户相关信息的WEB应用程序。相对于cookie来说,可以将session理解为在服务器端保存用户数据的一种方式,不同于cookie的另一个主要特点是session是基于浏览器进程的(就是说1个用户打开2个浏览器窗口,可能会产生2个session)。默认情况下Session是保存在服务器的指定的某个目录下的,具体位置可查看PHP.INI

此图为WAMP的session保存地址

session_start();
$_SESSION['visits']++;
print 'You have visited here '.$_SESSION['visits'].' times.';

运行上面的代码,每刷新一次,visits就会增加1,但无法跨浏览器,也就意味着如果你在新窗口打开此页面,访问次数显示为1。

PHP的Session能保持用户信息的秘诀就在于PHP为每个SESSION设置一个SESSION ID,并通过cookie保存到用户端,所以用户在刷新的时候,其实是将cookie中的 SESSION ID传递到服务器,然后在根据服务器上保持的用户信息反馈到用户端。默认情况下,如果用户的浏览器禁用了cookie功能,那么,SESSION ID 将通过URL传递(此方式存在安全风险,对于重要数据应避免此情况发生)

如何避免在用户浏览器禁用了cookie时不通过URL传递?

可以通过设置PHP.INI文件只允许通过cookie来传递SESSION ID,将session.user_only_cookies设置为off(上文截图的倒数第二行),如果是无法操作PHP.INI文件的情况下可以通过PHP代码实现


ini_set('session.use_only_cookies', true);
session_start();$salt     = 'YourSpecialValueHere';
$tokenstr = (str) date('W') . $salt;
$token    = md5($tokenstr);if (!isset($_REQUEST['token']) || $_REQUEST['token'] != $token) {// 提示登录exit;
}$_SESSION['token'] = $token;
output_add_rewrite_var('token', $token);

即便是采用了上述的措施,用户的SESSION ID保存到了cookie也还存在一种潜在风险,攻击者可能通过获取用户的cookie的数据后通过session id获取用户数据。书中采用的办法是通过session_regenerate_id();函数每30秒跟换一次session id来解决此情况,但这样做个人认为比较消耗资源。更好的办法是登录成功时将session id 与用户ip记录到服务器,那么在有效期内session id 如果与IP不一致即提示用户重新登录。

多服务器共享SESSION数据

许多的分布式应用需要多台服务器来共享一个用户的session数据,这时,如果按上面说的办法将数据保存到某台服务器的某个目录下,显然是不切实际的。最好是能将SESSION保存到数据库,这样多台应用都可以通过访问数据库的方式来访问session。PEAR包提供了此功能,代码如下,关于PEAR的内容在26章会做介绍。这里只用先了解下即可

require_once 'HTTP/Session/Container/DB.php';$s = new HTTP_Session_Container_DB('mysql://user:password@localhost/db');
ini_get('session.auto_start') or session_start();

为了提升性能也有用共享内存来保存session数据,书中是以PHP的shmop扩展为例来实现SESSION保存,而通过memcache来实现内存共享session的解决方案应用的更加普遍一些。

SESSION中能保持对象类型的数据吗?

这是一个在书中没有提到的话题,session不能直接保存对象,但是有办法就爱那个对象保存到session中,保存前需要对数据进行序列化而在取出数据时需要反序列化,在java或.NET那种原生OO语言中不存在此问题。

$_SESSION["OO"] = serialize($userInfo);//赋值时把对象序列化一下
$userInfo = unserialize($_SESSION["OO"]);//取值的时候再反序列化一下 

转载于:https://www.cnblogs.com/Excellent/archive/2011/12/07/2279838.html

PHP Cookbook读书笔记 – 第11章Session和持久化相关推荐

  1. PMP读书笔记(第11章)

    大家好,我是烤鸭:     今天做一个PMP的读书笔记. 第十一章 项目风险管理 项目风险管理 项目风险管理的核心概念 项目风险管理的趋势和新兴实践 裁剪考虑因素 在敏捷或适应型环境中需要考虑的因素 ...

  2. 《从0到1》读书笔记第11章“顾客不会自动上门”: 当幸福来敲门(完)

    摘要: 即使产品没有差异化,高超的销售和推销自身也可以形成垄断,反之则不行.不管产品如何优良 -即使它们可以轻松融入人们已有的习惯中,使使用过的人一见倾心,也必须要有完善的推广计划作为后盾. 相信大部 ...

  3. PHP Cookbook读书笔记 – 第16章互联网服务

    发送电子邮件 书中主要是以PEAR中的邮件发送类(Mail)来讲解的(关于如何在WIN系统下安装PEAR可以参考WIN下成功安装PEAR).PEAR的MAIL类可以通过3种方式来发送电子邮件: 通过P ...

  4. PHP Cookbook读书笔记 – 第17章图形

    概述 PHP中绘制图形多使用GD库来实现,GD的功能多寡会因你使用的GD版本以及在配置期间启用了哪些选项而有很大的不同. 常用的GD函数 ImageCreate() : 创建一个基于调色板的图像 Im ...

  5. 《Spring实战》读书笔记-第3章 高级装配

    <Spring实战>是学习Spring框架的一本非常经典的书籍,之前阅读了这本书,只是在书本上写写画画,最近整理了一下<Spring实战>的读书笔记,通过博客的方式进行记录分享 ...

  6. Oracle PL/SQL 程序设计读书笔记 - 第7章 使用数据

    Oracle PL/SQL 程序设计读书笔记 - 第7章 使用数据 Oracle PL/SQL 程序设计读书笔记 - 第7章 使用数据 7.1 程序数据的命名 PL/SQL要求在给数据结构命名的时候应 ...

  7. Machine Learning with Python Cookbook 学习笔记 第8章

    Chapter 8. Handling Images 前言 本笔记是针对人工智能典型算法的课程中Machine Learning with Python Cookbook的学习笔记 学习的实战代码都放 ...

  8. Java 核心技术卷 II(第 8 版) – 读书笔记 – 第 1 章(下)

    22.一旦获得了一个 Charset,就可以在 Java 的 Unicode 和指定的编码格式之间进行转化,下面以 GBK 和 Unicode 之间做为例子. 从 Unicode 到 GBK: imp ...

  9. 读书笔记 第四章 创造力

    读书笔记 第四章 创造力 创造性工程师的特点 创造性工程师一般具有以下特点: 1.坚持不懈 寻找问题的创造性解决方案需要不断的努力.在工作中总会遇到各种各样的问题,一个成功的创造性工程师永不会放弃.托 ...

  10. 【SQL.Cookbook读书笔记】——1检索记录

    SQL.Cookbook读书笔记 前言 1检索记录 1.1从表中检索所有行和列 1.2从表中检索部分行(where) 1.3查找满足多个条件的行(where.and.or) 1.4从表中检索部分列 1 ...

最新文章

  1. redis源码分析(beta版本)-redis实现的概述逻辑
  2. Android NullPointerException解决方法(空指针异常)
  3. HDOJ2795 Billboard【线段树】
  4. T-SQL编程基础之三:游标(Cursor)编程
  5. mybatis学习(34):动态sql-choose
  6. html写界面,C++|Qt后台处理业务(后台登录例子JavaScript给Qt提供数据)
  7. 《疯狂的站长》站长必读书籍
  8. Maxwell原理与应用
  9. 从程序员到项目经理(2)
  10. 读书笔记——《一个人的朝圣》
  11. harbor 安装启动遇到的keng
  12. VMware Workstation导出的ovf格式虚拟机 不能用VirtualBox导入
  13. springboot的RestTemplate客户端模式取得uaa的token
  14. 大学生职业生涯规划书
  15. SuperEdge再添国产智能加速卡支持,为边缘智能推理再提速10倍
  16. 微软ATP公益演讲| 如何培养在逆境中的生长力量
  17. 非常干货:Python 探针实现原理
  18. uniapp 全端小程序接入广告
  19. EasyUI之树形菜单
  20. 科技情报站 | 中国人工智能市场规模大幅增长、苹果将改善Safari应用体验等

热门文章

  1. 公司搞不好,除了坑股东,还坑的是客户
  2. java 线程 condition_JAVA多线程按指定顺序执行线程 Condition应用
  3. java 组件更新,java – 我可以批量处理一些Swing组件更新,以便重绘全部一次完成吗?...
  4. css渐变颜色php,CSS3中的颜色值RGBA以及渐变色的具体详解(图)
  5. 从mysql随机抽取数据_mysql随机抽取一定数量的记录实例讲解
  6. linux 源码包解压编译安装
  7. python中from的用法_Python import用法以及与from...import的区别
  8. linux snap文件夹,在Linux下使用Snap安装Rambox的方法
  9. 网站正在建设中_网站建设中如何设计更能吸引用户
  10. ajax简单异步图片上传,Ajax简单异步上传图片并回显