开发者社区 问答 正文

页面跳转之后session丢失

错误提示信息如下 ini_set(): ini var: session.auto_start be forbidden on ACE /home/u1039/ace/workspace/php/appcode/webroot/htdocs/ThinkPHP/Common/functions.php 第 1236 行.
ini_get(): ini var: session.gc_maxlifetime be forbidden on ACE /home/u1039/ace/workspace/php/appcode/webroot/htdocs/ThinkPHP/Library/Think/Session/Driver/Db.class.php 第 45 行.
后台代码如下:   
    public function login(){
        if(!IS_POST) halt('页面不存在');
        $username=I('username');
        $password=I('password','','md5');
        $user=M('user')->where(array('username'=>$username))->find();
        if(!$user||$password!=$user['password']){
            $this->error('登陆失败');
    }
    //更新登陆信息
        $date=array(
            'id'=>$user['id'],
            'logintime'=>time(),
            'loginip'=>get_client_ip(),
            );
        M('user')->save($date);
    //为session写入数据
        session('uid',$user['id']);
        session('username',$user['username']);
        session('loginip',$user['loginip']);
        session('logintime',date('Y-m-d H:i:s',$user['logintime']));
        $this->redirect('Admin/Index/index');
    }
}
跳转到后台主页之后session信息是空的,


框架是thinkphp 3.2.2 如何才能写入session.

展开
收起
gumtrip 2016-01-14 16:02:00 6899 分享 版权
阿里云 AI 助理回答

根据您提供的错误信息和代码背景,您在使用ThinkPHP 3.2.2框架时遇到了关于session设置被禁止的问题。具体表现为ini_set()ini_get()函数在尝试修改或获取session相关配置时提示被禁止。这通常是因为运行环境(如ACE)对这些配置项进行了限制,不允许在脚本中动态修改。针对您的情况,可以尝试以下步骤解决session写入问题:

1. 检查服务器环境配置

  • 确认权限:首先确认您的运行环境是否允许在脚本层面修改session的配置。如果是在受限环境如某些云开发平台或特定的安全容器(如ACE),可能需要通过管理界面或配置文件来调整session设置,而不是直接在代码中使用ini_set()

2. 配置ThinkPHP的Session驱动

  • ThinkPHP支持多种session存储方式,默认为文件存储。鉴于您遇到的限制,考虑更改session的存储机制至数据库或其他不受当前限制影响的方式。

修改配置文件

打开/home/u1039/ace/workspace/php/appcode/webroot/htdocs/ThinkPHP/Conf/config.php,找到session配置部分,修改为使用数据库存储(假设数据库已正确配置):

// 数据库驱动的session存储
'SESSION_TYPE' => 'Db', // 使用Db类型
'SESSION_PREFIX' => 'think_', // session前缀
'SESSION_OPTIONS' => array(
    'table' => '__session__', // 表名
    'expire' => 3600, // 过期时间(秒)
),

确保数据库中有对应的session表结构,并且应用有相应的读写权限。

3. 确保全局session配置正确

  • 如果您的环境确实不允许动态修改session配置,请检查服务器的php.ini文件,确保session.auto_startsession.gc_maxlifetime等参数已经按照应用需求预先设置好。

4. 代码层面的调整

  • 考虑到直接修改ini设置不可行,您无需在代码中使用ini_set()尝试修改session配置。重点应放在确保ThinkPHP框架的session配置与环境兼容上。

5. 测试与验证

  • 完成上述配置后,重启Web服务器(如Apache或Nginx以及PHP-FPM服务),然后重新测试登录功能,观察session数据是否能够正常写入并跨页面保持。

注意事项

  • 安全考量:在生产环境中修改session存储方式或配置时,需注意数据安全性和性能影响。
  • 备份:在修改配置文件之前,建议先备份原文件,以防配置错误导致服务异常。

通过以上步骤,您应该能解决session无法写入的问题。如果问题依旧存在,建议进一步查看服务器日志,以获取更详细的错误信息进行排查。

有帮助
无帮助
AI 助理回答生成答案可能存在不准确,仅供参考
0 条回答
写回答
取消 提交回答
问答分类:
PHP
问答地址: