Проблема с HTTP в HTTPS сеанса PHP

У меня есть (HTTPS) страница login.php, которая остается HTTPS (т.е. после входа пользователя в панель управления учетной записью). Теперь проблема заключается в том, что пользователь во время входа в защищенную панель управления нажимает на нечувствительную страницу, например страницу (HTTP) about-us.php, сеанс не передается по HTTP, поскольку у меня есть session.cookie_secure = 1, что означает пользователь кажется вышедшим из системы на страницах HTTP.

Однако, когда пользователь возвращается на страницу панели управления или на любую конфиденциальную страницу учетной записи, мне сказали, что он все равно должен войти в систему (т.е. с HTTP обратно на HTTPS)? Однако это не тот случай, и он, кажется, тоже отключился от HTTPS-соединения?

Я полагаю, что не хватает чего-то, что вызывает эту проблему. Вот мой код:

Это файл заголовка PHP, который вызывается для запуска сеанса на странице login.php:

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();}

Это файл заголовка PHP, который требуется на каждой странице, чтобы проверить, инициирован ли сеанс уже:

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();}

Также, если есть какое-то использование, это код для отключения HTTPS на нечувствительных страницах, таких как about-us.php

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

Мои настройки cookie файла php.ini

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
12
задан OMG Ponies 7 May 2011 в 15:06
поделиться