PHP 7.2警告: “Cannot change session name when session is active”[通俗易懂]

PHP 7.2警告: “Cannot change session name when session is active”

大家好,又见面了,我是全栈君。

项目在php7.1 版本正常,迁移服务器php 7.2 报错

Maybe it’s a warning but with Tracy I have an error.

To solve this I put session_write_close(); before session_set_cookie_params();. It’s not a good fix but it’s works

PHP 7.2警告: “Cannot change session name when session is active”[通俗易懂] 

session_name() as well as session_set_cookie_params() are always nonesense if the session is already running.

翻译: session_name()以及session_set_cookie_params()总是不存在意义的,如果会话已在运行。

 

I had a similar problem but finally found a way through. The code below was my first approach that gave me errors.

static function startmysession($lifetime, $path, $domain, $secure, $httponly){

    session_set_cookie_params($lifetime, $path, $domain, $secure, $httponly);
    session_regenerate_id(true);

    if(!isset($_SESSION)){
        session_start();
    }
}

Now Earlier versions of php overlooked our mistake(We were practically renaming and giving a session that already exists properties which is very wrong. So how did i solve this problem?(现在php的早期版本忽略了我们的错误(我们实际上是在重命名和提供一个已经存在的会话属性,这是非常错误的)。那么我是如何解决这个问题的呢?)

static function startmysession($lifetime, $path, $domain, $secure, $httponly){      
    if(!isset($_SESSION)){  
         session_set_cookie_params($lifetime, $path, $domain, $secure, $httponly);
         @session_regenerate_id(true);    
             session_start();
         }    
    }

I now bound the session_set_cookie_params() just before session start and I test if the session already exists before doing so.(现在,我在会话开始之前绑定了会话session_set_cookie_params(),并在此之前测试会话是否已经存在。)

My solution:

Originally:

        $cookieParams = session_get_cookie_params();

        session_set_cookie_params(
            $seconds,
            $cookieParams['path'],
            $cookieParams['domain'],
            $cookieParams['secure']
            );

Now:

        if(isset($_SESSION)) {
            if ($seconds != 0) {
                setcookie(session_name(), session_id(), time() + $seconds);
            } else {
                setcookie(session_name(), session_id(), $seconds);
            }
        } else {
            $cookieParams = session_get_cookie_params();

            session_set_cookie_params(
                $seconds,
                $cookieParams['path'],
                $cookieParams['domain'],
                $cookieParams['secure']
            );
        }

 

参考:https://stackoverflow.com/questions/47700336/php-7-2-warning-cannot-change-session-name-when-session-is-active

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/111572.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • svn用户名和密码设置_git配置本地用户名密码

    svn用户名和密码设置_git配置本地用户名密码SVN配置用户192.168.1.200   Administrator     ydd!@#$1234()90 1、备份D:\svn\conf\authz,再修改2、备份D:\svn\conf\passwd,再修改注意:* 权限配置文件中出现的用户名必须已在用户配置文件中定义。* 对权限配置文件的修改立即生效,不必重启s

    2022年9月13日
    1
  • redis是单线程还是多线程,有哪些特点(linux多线程面试题)

    0.redis单线程问题单线程指的是网络请求模块使用了一个线程(所以不需考虑并发安全性),即一个线程处理所有网络请求,其他模块仍用了多个线程。1.为什么说redis能够快速执行(1)绝大部分请求是纯粹的内存操作(非常快速)(2)采用单线程,避免了不必要的上下文切换和竞争条件(3)非阻塞IO-IO多路复用2.redis的内部实现 内部实现采用epoll,采用了epoll+自己…

    2022年4月15日
    39
  • WTM框架使用技巧之:Layui版本嫁接Vue+ElementUI[通俗易懂]

    WTM框架使用技巧之:Layui版本嫁接Vue+ElementUI[通俗易懂]为什么要这样做layui版本具备很多优点:组件齐全、ide提醒程度高、代码量少、依赖少、编译快、运行快,非常适合一个人的开发全队。但它也有很多缺点,比如说组件灵活度低、可控性差。受blazorssr的思路启发,将vue嫁接进layui版本中,在大部分常规页面中,保留layui的快速高效用法。在极少部分需要大量定制化的页面,采用vue+elementUI的方式编写,既能保证开发效率,又能解决复杂页面编写。因此本文拿一个页面改造的例子,旨在抛砖引玉。准备工作在_Layout中引入包_Layo

    2022年6月25日
    44
  • https和http有什么区别

    https和http有什么区别

    2021年10月9日
    46
  • 八款常见的Android游戏引擎

    八款常见的Android游戏引擎1、AngleAngle是一款专为Android平台设计的,敏捷且适合快速开发的2D游戏引擎,基于OpenGLES技术开发。该引擎全部用Java代码编写,并且可以根据自己的需要替换里面的实现,缺陷在于文档不足,而且下载的代码中仅仅包含有少量的示例教程。最低

    2022年9月19日
    3
  • sm羞耻任务_羞耻驱动的发展

    sm羞耻任务_羞耻驱动的发展sm羞耻任务我一直渴望写出精巧的代码。在完成所有生产代码配对的日常工作中,我认为我们的质量很高。但是令人惊讶的是,当您独自编码时,您多么容易原谅自己并陷入不良习惯。配对时羞耻是品质背后的动力吗?我们有许多使用EasyMock编写的古老的单元测试;我们所有最近的单元测试都使用JMock。这笔小小的技术债务意味着,如果您要更改仅适用于EasyMock测试的代码,则首先必须决…

    2022年9月15日
    3

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号