美文网首页
PHP的session机制

PHP的session机制

作者: page0906 | 来源:发表于2019-11-28 17:25 被阅读0次
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的session机制

      本文链接:https://www.haomeiwen.com/subject/bneldttx.html