Session PHP HTTP à HTTPS problème

J'ai un (HTTPS) login.php la page qui reste HTTPS (c'est à dire une fois que l'utilisateur est connecté en va de tableau de bord du compte). Maintenant, le problème est de dire à l'utilisateur tout en étant connecté sur le tableau de bord sécurisé clique sur un non-sensible à la page (HTTP) about-us.php page, la session n'est pas transmis sur HTTP comme j'ai de la session.cookie_secure=1, ce qui signifie que l'utilisateur apparaît déconnecté sur HTTP pages.

Toutefois, lorsque l'utilisateur revient à la page de tableau de bord ou tout sensible à la page de compte j'ai déjà dit qu'il devrait toujours être connecté (c'est à dire de HTTP vers HTTPS)? Cependant, ce n'est pas le cas et il semble déconnecté sur la connexion HTTPS trop?

Je crois que je suis absent quelque chose qui est à l'origine de ce problème. Voici mon code:

C'est PHP fichier d'en-tête qui est appelé à démarrer la session sur login.php page:

session_start();
session_regenerate_id(true); /*avoid session fixation attempt*/

/*Create and check how long session has been started (over 5 mins) regenerate id - avoid session hijack*/
if(!isset($_SESSION['CREATED'])) 
{
    $_SESSION['CREATED'] = time();/*time created session, ie from login/contact advertiser/email_confirm only ways for new session to start*/
} 
elseif(time() - $_SESSION['CREATED'] > 300) 
{
    /*session started more than 5 mins(300 secs) ago*/
    session_regenerate_id(true); /*change session ID for the current session and invalidate old session ID*/
    $_SESSION['CREATED'] = time(); /*update creation time*/
}

/*Check if user is logged in*/
if(!isset($_SESSION['loggedin']))
{
    $_SESSION['loggedin']=1;/*used to track if user is logged in on pages*/
}

/*if return false browser supports standard ob_start();*/
if(ob_start("ob_gzhandler")){ob_start();}

C'est PHP fichier d'en-tête nécessaires sur chaque page pour vérifier si d'initiation de session déjà:

session_start(); 

$session_errors=0;/* if>0 user not logged in*/

/*check if session is already initiated*/
if(isset($_SESSION['CREATED'])) 
{
    if(time() - $_SESSION['CREATED'] > 300) 
    {
        /*session started more than 5 mins(300 secs) ago*/
        session_regenerate_id(true); /*change session ID for the current session and invalidate old session ID*/
        $_SESSION['CREATED'] = time(); /*update creation time*/
    }
}
elseif(!isset($_SESSION['CREATED'])){$session_errors++;}/*user not logged in*/

/*Check if user is logged in*/
if(!isset($_SESSION['loggedin'])){$session_errors++;}/*user not logged in*/

if(ob_start("ob_gzhandler")){ob_start();}

Également si toute utilisation c'est le code pour activer HTTPS de non confidentielles sur des pages telles que about-us.php

if ($_SERVER['SERVER_PORT']!=80)
{
$url = "http://". $_SERVER['SERVER_NAME'] . ":80".$_SERVER['REQUEST_URI'];
header("Location: $url");
}

Mon php.ini fichier de paramètres des cookies

session.cookie_secure=1
session.cookie_httponly=1
session.use_only_cookies=1
session.cookie_lifetime = 0
session.save_path = /tmp
session.save_handler = files
Double Possible: stackoverflow.com/questions/441496/...
Voir la question ci-dessus (ne pas suivre ses suggestions tout de même), lorsque l'utilisateur déplace à la connexion http, le cookie n'est pas transféré, donc quand session_start() est appelé, il génère un nouvel ID de session, donc de la précédente session id est perdu.
J'ai lu le thread et le seul moyen semble être de définir cookie de sécurité drapeau à "Off". Mais ce n'est sûrement l'insécurité cant mon session_id alors être détecté sur une page HTTP? Je ne veux pas envoyer session_id URL énorme faille de sécurité.
yup, c'est un trou de sécurité énorme, c'est pourquoi je vous ai dit de ne pas suivre ses suggestions 🙂 - j'ai une solution, posté comme une réponse ci-dessous, si elle ne peut pas être la solution que vous voulais.

OriginalL'auteur daza166 | 2011-05-07