discuz清空session,导致session保存机制失败,session

作者:金牛区福生殡葬服务部 来源:www.cdfsbz.com 发布时间:2017-09-08 20:19:41
discuz清空session,导致session保存机制失败,session无法更新与解决

[php]



<?php

function userErrorHandler() {
$e = func_get_args();
echo '<pre style="color:red;"><br/>----------运行出错---------:<br/>'.print_r($e, 1).'<br/>----------运行出错---------<br/></pre>';
}
set_error_handler("userErrorHandler");
set_exception_handler("userErrorHandler");

function shutdown() {
$a=error_get_last();
if($a != null) echo '<pre style="color:red;"><br/>++++++低级错误+++++<br/>'.print_r($a, 1).'<br/>++++++低级错误+++++<br/></pre>';
}

register_shutdown_function('shutdown');//如果使用了exit将不运行此脚本


switch($_GET['how']) {
case 's'://set
session_start();
$_SESSION['qidizi'] = rand();
echo $_SESSION['qidizi'];
break;
case 'u'://unset
session_start();
$_SESSION['qidizi'] = 'qidiziUNSET';
echo $_SESSION['qidizi'];
break;
case 'g'://get
session_start();
var_dump($_SESSION);
break;
case 'c'://clean
session_start();
echo 'get---------<br/>';
var_dump($_SESSION);
echo '<br/>edit-------</br/>';
$_SESSION['qidizi'] = 'qidiziCLEAN';
var_dump($_SESSION);
echo '<br/>under clean---------<br/>';
$GLOBALS['_SESSION']=null;unset($GLOBALS['_SESSION']);//unset后,session会失效
empty($GLOBALS['_SESSION']) && ($GLOBALS['_SESSION']['qidiziReBuid'] = '1');//本句并不能重建/重触发session保存机制
session_write_close();//提前保存session改变,discuz清除了session导致保存机制失败,by qidizi,这句话才有效,提交保存
var_dump($_SESSION);
break;
}


<?php

function userErrorHandler() {
$e = func_get_args();
echo '<pre style="color:red;"><br/>----------运行出错---------:<br/>'.print_r($e, 1).'<br/>----------运行出错---------<br/></pre>';
}
set_error_handler("userErrorHandler");
set_exception_handler("userErrorHandler");

function shutdown() {
$a=error_get_last();
if($a != null) echo '<pre style="color:red;"><br/>++++++低级错误+++++<br/>'.print_r($a, 1).'<br/>++++++低级错误+++++<br/></pre>';
}

register_shutdown_function('shutdown');//如果使用了exit将不运行此脚本


switch($_GET['how']) {
case 's'://set
session_start();
$_SESSION['qidizi'] = rand();
echo $_SESSION['qidizi'];
break;
case 'u'://unset
session_start();
$_SESSION['qidizi'] = 'qidiziUNSET';
echo $_SESSION['qidizi'];
break;
case 'g'://get
session_start();
var_dump($_SESSION);
break;
case 'c'://clean
session_start();
echo 'get---------<br/>';
var_dump($_SESSION);
echo '<br/>edit-------</br/>';
$_SESSION['qidizi'] = 'qidiziCLEAN';
var_dump($_SESSION);
echo '<br/>under clean---------<br/>';
$GLOBALS['_SESSION']=null;unset($GLOBALS['_SESSION']);//unset后,session会失效
empty($GLOBALS['_SESSION']) && ($GLOBALS['_SESSION']['qidiziReBuid'] = '1');//本句并不能重建/重触发session保存机制
session_write_close();//提前保存session改变,discuz清除了session导致保存机制失败,by qidizi,这句话才有效,提交保存
var_dump($_SESSION);
break;
}
以上是测试代码


关键是在 $GLOBALS['_SESSION']=null; 这句.且

[php]
unset($GLOBALS['_SESSION']);

unset($GLOBALS['_SESSION']);会让session在解析结束保存session的机制失败,看起来是这样的.不懂session自动保存的机制是怎么样的.演示代码中简单的重建并没有触发保存机制.

所以,后来我使用了提前调用方法提前保存我的session更改.


在discuz_application这个类中有对全局变量进行清空,

因为
正面面变量不需要保留,

企业建站2800元起,携手武汉肥猫科技,做一个有见地的颜值派!更多优惠请戳:湖北网站制作 http://hubei.666rj.com

  • 上一篇:python实现QQ机器人(自动登录,获取群消息,发送群消
  • 下一篇:最后一页
  • 
    COPYRIGHT © 2015 金牛区福生殡葬服务部 ALL RIGHTS RESERVED.
    购买cdfsbz.com友情链接、项目合作请联系客服QQ:2500-38-100 邮箱:2500-38-100#QQ.com(#换@)
    本站所有原创信息,未经许可请勿任意转载或复制使用 网站地图 技术支持:肥猫科技
    精彩专题:网站建设
    购买本站友情链接、项目合作请联系客服QQ:2500-38-100