PHP的session机制

PHP机制使用session
  • 开启session --- session_start();
  • 存取session --- $_SESSION['uname'] = 'hello';
  • 销毁session
//删除内存中由session数组保存的变量;$_SESSION = array()清除所有session变量 
unset($_SESSION['uname']);
//删除客户端cookie中的sessionid,session_name()默认是PHPSESSID
setCookie(session_name(),'',time()-1,'/');
//销毁服务器端session文件
session_destory();
PHP的session配置选项

查看session配置的最直接方式就是phpinfo(); 然后根据需要配置/usr/local/php/etc/php.ini文件里的session选项,其实一般默认就可以。
可以考虑更改的配置选项有:
session.cookie_lifetime = 0;     //设置cookie保存时间(秒),相当于session的过期时间,0表示直到浏览器重启
session.save_handler = files;     //保存和取回数据的方式,默认为文件; 涉及到存储机制,此处不作延伸
当然也可以不修改配置文件,使用系统函数,达到同样的效果:
setCookie(session_name(), session_id(), time()+1440, '/'); //设置cookie有效时间为1440秒(24’),解决关闭浏览器session丢失的现象;session在服务器上存的最长时间为24’,重新连接后才不会过期。(即保持登录功能)

PHP的session自动回收机制(启动概率 = session.gc_probability / session.gc_divisor)
  session.gc_probability = 1     //启动几率

  session.gc_divisor = 1000     //被除数,因子

  session.gc_maxlifetime = 1440  //设置session的最大过期时间,默认1440''

只要客户端存在操作,session过期时间就会保持不减;当超过过期时间未操作,回收机制就会启动,将服务端session删除。

基于URL传递session的id(解决客户端禁用cookie的情况)

1. url传参:

    <a href="demo.php?<?php echo session_name().'='.session_id(); ?>">DEMO</a>

  服务端处理:

    $sid = !empty($_GET[session_name()]) ? $_GET[session_name()] : '';

    session_id($sid);  //设置用已有的sid开启会话,在session_start()之前

    session_start();

2. 如何自动判断是否开启了cookie,并使用对应的传递方式?(使用系统自带SID常量,自动判断)

    <a href="demo.php?<?php echo SID; ?>">DEMO</a>

    $sid = !empty($_GET[session_name()]) ? $_GET[session_name()] : '';

    if($sid != ''){

      session_id($sid);

    }

3. 使URL自动加session的id?

enable_trans_uid配置选项,和运行时选项session.use_trans_sid都被激活时,当客户端禁用cookie时,相对的URL将自动被修改为包含sessionid,如果没有配置或使用Windows服务器,可以使用常量SID。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 一、默认机制,用磁盘文件来实现PHP会话。php.ini配置:session.save_handler = fil...
    bycall阅读 937评论 0 0
  • 原文地址: 彻底理解PHP的SESSION机制[https://www.cnblogs.com/kekjiuyue...
    拿破仑蛋糕阅读 433评论 0 0
  • Session的声明与使用 Session的设置不同于Cookie,必须先启动,在PHP中必须调用session_...
    寻回骄傲阅读 2,970评论 0 18
  • 见五蕴皆空,度一切苦厄。舍利子,色不异空,空不异色,色即是空,空即是色,受想行识,亦复如是。舍利子,是诸法空相,不...
    美术之星阅读 2,113评论 1 3
  • “工欲善其事,必先利其器”,只有将时间花在磨练自己,从身体、精神、心智到待人处事四个层面,才能增进个人产能,累积其...
    旦暮暮阅读 281评论 0 0