Php Session详解及应用

简单使用

读写session

Session_start();
$_SESSION["name"] = "value";
echo $_SESSION["name"];

销毁session

session_unset();
session_destroy();
session_is_registered("gender")

读sessionID

<?php  
    session_start();   
    echo session_id();  
    // 输出 dqr58dnuqj2gufvg4o3tmjb9v4  
?>  

写sessionID

<?php  
    session_id("NowaMagic");  
    session_start();   
    echo session_id();  
    // 输出 NowaMagic  
?>  

登录超时的应用

在每一个前端页面与后台交互时,后台均可通过判断session是否超时,来决定用户可进入当前页面还是强制用户重新登录。

  • 在ThinkPhp中,如何界面登录超时?步骤如下:
  1. 通过执行session操作记录login_time;
  2. 除登录外的所有其他界面对应的Controller均继承BaseController,在BaseController的_initialize()函数中,将执行checkAdminSession()检查是否登录超时,如登录未超时,则把login_time变量赋值为当前时间,并继续刷新当前界面,否则跳到Login界面。
    猜测类似Spring等框架将采用类似操作。

Session和Cookie的区别

  • Session中同一浏览器同一站点只能有一个session_id,即一个session,cookie同。
  • cookie存在客户端,session存在服务端。
  • 由于浏览器经常禁用cookie,导致cookie是不可靠的,而session存在服务端,是可靠的。
  • 用户在连接服务器时,会由服务器生成一个唯一的SessionID,用该SessionID 为标识符来存取服务器端的Session存储空间。SessionID是保存到客户端的:a. 用Cookie保存的,用户提交页面时,会将这一 SessionID提交到服务器端,来存取Session数据。这一过程,是不用开发人员干预的; b. 如果客户端Cookie禁用,则服务器可以自动通过重写URL的方式来保存Session的值,并且这个过程对程序员透明。
    可以试一下,即使不写Cookie,在使用request.getCookies();取出的Cookie数组的长度也是1,而这个Cookie的名字就是JSESSIONID,还有一个很长的二进制的字符串,是SessionID的值。
  • session由于存储在服务器,会影响系统性能
    session在大访问量网站上会影响系统性能,影响性能的原因之一由文件系统设计造成,在同一个目录下超过10000个文件时,文件的定位将非常耗时,PHP支持 session目录hash,我们可以通过修改php.ini中session.save_path = “2;/path/to/session/dir”,那么session将存储在两级子目录中,每个目录有16个子目录[0~f],不过好像PHP session不支持创建目录,你需要事先把那么些目录创建好 。
    还有一个问题就是小文件的效率问题,一般我们的 session数据都不会太大(1~2K),如果有大量这样1~2K的文件在磁盘上,IO效率肯定会很差,PHP手册上建议使用Reiserfs文件系 统,不过Reiserfs的前景堪忧,Reiserfs的作者把媳妇给杀了,SuSE也抛弃了Reiserfs。
  • 应用场景
    cookie应用场景:
    a. 判断用户是否登陆过网站,以便下次登录时能够直接登录。如果我们删除cookie,则每次登录必须从新填写登录的相关信息。
    b. 另一个重要的应用是“购物车”中类的处理和设计。用户可能在一段时间内在同一家网站的不同页面选择不同的商品,可以将这些信息都写入cookie,在最后付款时从cookie中提取这些信息,当然这里面有了安全和性能问题需要我们考虑了。
    session应用场景:
    a. 登录超时判断;
    b. 保存购物车信息;
    比如在淘宝的产品详情页面,提交了产品尺寸信息到服务器,然后采用session保存该尺寸信息,在用户点击支付时,再将支付信息+产品尺寸信息(从session中读取),统一写到数据库即可。(无需用户在前端每提交一个数据,就保存到数据库一次)
    c. 保存验证码信息

参考

php里session的用法(超级经典)
浅谈Session与Cookie的区别与联系
ThinkPHP函数详解:session方法
thinkphp中的session的使用和理解!
PHP通过session id 实现session共享和登录验证

    原文作者:一只好奇的茂
    原文地址: https://www.jianshu.com/p/7d3fc5ed1f19
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞