Support » Plugin: Lead info with country for Contact Form 7 » Issue with session_start

  • Resolved oliverhtml

    (@oliverhtml)


    Hi there,
    I’ve had an issue with this plugin and redis caching on krystal hosting’s onyx hosting. When a request is sent to wp-ajax it raises a headers already sent warning originating in the plugin on this section, this then causes redis to break for some unknown reason and ajax then returns a 500 error. I’ve disabled all other plugins and the theme and narrowed it down to this line.

    if (!session_id()) {
    session_start();
    }

    When I comment out the session_start the whole thing works quite nicely, this occurs on php 7.3. I suspect there’s not that much you can do as I’ve had a little look and the session id is always returning as false in my instance.

    Thanks,
    Oliver

Viewing 7 replies - 1 through 7 (of 7 total)
  • Plugin Author apasionados

    (@apasionados)

    Hi @oliverhtml,

    Sorry to hear that you are having problems. I don’t think we can fix them, but we will have a look.

    Best regards from Spain.

    Hi there,
    it turns out that this is the cause of the intermittent 502 errors we’ve been seeing also. Could you check for one of the redis constants: WP_REDIS_PORT, WP_REDIS_HOST, WP_REDIS_PASSWORD prior to a session_start call or provide a filter that returns whether or not to start a session. I’m conscious that we still want to use the plugin but don’t want to take it off of the update path!

    Kind Regards,
    Oliver

    Plugin Author apasionados

    (@apasionados)

    Hi @oliverhtml,

    If you have modified the plugin with the constants, please share the changes and we will test them to include them in the plugin reléase.

    Best regards from Spain.

    Hi,
    this seems to do it for compatability with this plugin: https://wordpress.org/plugins/redis-cache/

    it’s probably not the best solution overall as it’s specific to that plugin but it does get it running on krystal hosting’s onyx package.

    if (!session_id()) {
    if(empty(WP_REDIS_HOST) && empty(WP_REDIS_PORT) && empty(WP_REDIS_PASSWORD)){
    session_start();
    }
    }

    Thanks,
    Oliver

    Plugin Author apasionados

    (@apasionados)

    Thanks for the code. Probably we will modify it before our tests to check whether the variable exists with !isset(WP_REDIS_HOST) instead of empty(WP_REDIS_HOST) to avoid errors when the variables are not defined.

    !isset(WP_REDIS_HOST) to check whether a variable is not set.

    empty(WP_REDIS_HOST) works for:

    • “” (an empty string)
    • 0 (0 as an integer)
    • 0.0 (0 as a float)
    • “0” (0 as a string)
    • NULL
    • FALSE
    • array() (an empty array)
    • $var; (a variable declared, but without a value)

    But we are not sure how it behaves in different PHP versions when the variable is not defined.

    Could you please try on your installation if this works for you:

    if (!session_id()) {
    if(!isset(WP_REDIS_HOST) && !isset(WP_REDIS_PORT) && !isset(WP_REDIS_PASSWORD)){
    session_start();
    }
    }

    Best regards from Spain.

    • This reply was modified 9 months, 3 weeks ago by apasionados. Reason: added code tag to empty(WP_REDIS_HOST)

    Hi again!
    I just used empty because it checks whether the variable exists and is the equivalent of : !isset($var) || $var == false

    https://www.php.net/manual/en/function.empty.php

    I will update to your method and give it a go
    Thanks,
    Oliver

    Plugin Author apasionados

    (@apasionados)

    Ok. Looks like we were wrong and it’s better to use empty: Determine whether a variable is considered to be empty. A variable is considered empty if it does not exist or if its value equals FALSE. empty() does not generate a warning if the variable does not exist.

    So we will use empty() then.

    Best regards from Spain.

Viewing 7 replies - 1 through 7 (of 7 total)
  • The topic ‘Issue with session_start’ is closed to new replies.