php js html При обновлении страницы не сохраняется Сессия.

Статус
В этой теме нельзя размещать новые ответы.
Сообщения
119
Реакции
53
Помог
4 раз(а)
Избыточное форматирование
Доброго времени суток.

Имеется небольшой php шаблон, где страницы подгружаются Ajax скриптом. Всё исправно работает, но при перезагрузке страницы "F5" Сессия пропадает.

Прошу помощи. В интернете много информации даже не знаю куда копать понимаю что скорее всего дело в "Session и Cookies" но что бы я не пробовал не получается.

Возможно у меня не работает session_start .

.htaccess
PHP:
php_flag display_errors On
php_flag session.cookie_httponly On
AddDefaultCharset UTF-8
Options -Indexes +FollowSymLinks

RewriteEngine on

# if a directory or a file exists, use it directly
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d

# otherwise forward it to index.php
RewriteRule . index.php
index.php
PHP:
<?php
include("class.php");
?>
<!doctype html>
<html lang="ru">
<head>

<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<meta http-equiv="x-ua-compatible" content="ie=edge">
<meta name=viewport content="width=device-width, initial-scale=1">

<link rel="stylesheet" href="style.css" type="text/css" media="screen">

<script src="jquery-v1.11.1.js"></script>
<script src="history.js"></script>
<script src="document.js"></script>

<title><?php echo $data->title(); ?></title>
</head>
<body>

<div class="wrapper">

<div id="footer-l">

<header>

<div class="animated-wrap">
     <div class="animated-panel animated-back"></div>
     <div class="animated-panel animated-front"></div>
</div>

<div class= "banner"></div>

</header>

    <div id="page-l">
    <nav><ul class="nav"><?php echo $data->menu(); ?></ul></nav>
    </div>
</div>

<div id="footer-r">
    <div class="content"><?php echo($data->content($data->state(),$data->title())); ?></div>
</div>

</div>

</body>
</html>
class.php
PHP:
<?php
$menu = array(
    '1' => array("name" => "Главная", "page" => "home"),
    '2' => array("name" => "Сервисы", "page" => "service"),
    '3' => array("name" => "Ошибки", "page" => "error")
);

class load_page_vars {

    function title(){

        global $menu;
        $item = $menu;

        $str = '';
        $i=0;
        foreach($item as $k => $value)
        {
            $i++;
            if($item[$i]["page"] == ".".$this->state())
            {
                return $item[$i]["name"];
            }      
        }
    }

    function menu(){

        global $menu;

        $str = '';
        $i=0;
        foreach($menu as $k => $value)
        {
            $i++;
            $str.= "<li><a href='".$menu[$i]["page"]."' ".($menu[$i]["page"] == ".".$this->state() ? 'class="selected"' : '')." title='".$menu[$i]["name"]."'>".$menu[$i]["name"]."</a></li>";
        }
        //$this->state($page_title);
        return $str;
    }



    function content($page, $name){

        $post = array(
            'page' => ".".$page,
            'name' => $name,
            'password' => 'bar',
            'submit' => TRUE,
        );
       
        $data = http_build_query($post);

        $opts = array(
                  'http' => array(
                      'method' => 'POST',
                      'header' => "Content-type: application/x-www-form-urlencoded\r\nContent-Length: " . strlen($data) . "\r\n",
                      'content' => $data,
                  )
               );

        $context  = stream_context_create($opts);

        $url = $this->siteURL()."/content.php";
        $content = file_get_contents($url,FALSE,$context);

        return $content;
    }

    function state() {
        $request = substr($_SERVER['PHP_SELF'], 0, strrpos($_SERVER['PHP_SELF'], '/'));
        $str_repl = str_replace($request, '', $_SERVER['REQUEST_URI']);
        return $str_repl;
    }

    function siteURL()
    {
        if (isset($_SERVER['HTTPS']) &&
            ($_SERVER['HTTPS'] == 'on' || $_SERVER['HTTPS'] == 1) ||
            isset($_SERVER['HTTP_X_FORWARDED_PROTO']) &&
            $_SERVER['HTTP_X_FORWARDED_PROTO'] == 'https') {
          $protocol = 'https://';
        }
        else {
          $protocol = 'http://';
        }

        $siteUrl = $protocol.$_SERVER["HTTP_HOST"].$_SERVER["PHP_SELF"];

        return dirname($siteUrl);

    }

}

$data = new load_page_vars();



?>
content.php
PHP:
<?php
switch ($_POST["page"]) {

    //Home page
    case "home":
    include($_SERVER['DOCUMENT_ROOT'].'/home.php');
    break;

    //Service page
    case "service":
    include($_SERVER['DOCUMENT_ROOT'].'/page/service.php');
    break;

    //Страница ошибок
    case 'error':
    default:
    include($_SERVER['DOCUMENT_ROOT'].'/page/error.php');
    break;

}
?>
home.php (страничка первая)
HTML:
<li><strong>V Междисциплинарный конгресс</strong> по заболеваниям органов головы и шеи. 29-31 Мая 017 года Москва. </li>
                           
<li><strong>МАСТЕР-КЛАСС ИСМАГИЛОВА А.Х.</strong> - «АУГМЕНТАЦИОННАЯ МАММОПЛАСТИКА - ВЗГЛЯД ИЗ КАЗАНИ» 26 мая 2017г. Москва </li>

<li><strong>ПРАКТИЧЕСКИЙ СЕМИНАР С УЧАСТИЕМ ДОКТОРА РОЛАНДА НЕЯ</strong> - «КОРРЕКЦИЯ ВЕРХНЕЙ ТРЕТИ ЛИЦА ПРИ ПОМОЩИ ПРЕПАРАТА JUVEDERM VYCROSS: ЛОБ, ВИСКИ И БРОВИ» 30 мая 2017 г. Москва </li>
                         
<li><strong>ПРАКТИЧЕСКИЙ СЕМИНАР С УЧАСТИЕМ ПРОФЕССОРА АКСЕЛЬ-МАРИО ФЕЛЛЕРА (ГЕРМАНИЯ)</strong> - «РЕКОНСТРУКЦИЯ МОЛОЧНЫХ ЖЕЛЕЗ 23 июня 2017 г., г. Москва</li>
service.php (страничка вторая)
HTML:
<li><strong>МЕЖДУНАРОДНЫЙ СИМПОЗИУМ</strong> - «ОТ ЭСТЕТИЧЕСКОЙ ХИРУРГИИ К РЕКОНСТРУКТИВНОЙ»15-17 июля 2017 г., г. Москва </li>
                         
<li><strong>ПРАКТИЧЕСКИЙ СЕМИНАР</strong> - «ДИФФЕРЕНЦИРОВАННЫЙ ПОДХОД В АУГМЕНТАЦИОННОЙ МАММОПЛАСТИКЕ» 7 октября 2017 г., г. Москва</li>
                         
<li><strong>Первая конференция(ISAPS)</strong> Международного общества эстетической пластической хирургии в России «Эстетическая пластическая хирургия – путь к успеху» 10-11 ноября 2017 г., г. Москва. </li>
                         
<li><strong>ПРАКТИЧЕСКИЙ СЕМИНАР</strong> - «ДИФФЕРЕНЦИРОВАННЫЙ ПОДХОД В РИНОПЛАСТИКЕ» Рыбакин А.В. и Липский К.Б. 2 декабря 2017г. Москва</li>
                         
<li><strong>VI Национальный конгресс</strong> - «ПЛАСТИЧЕСКАЯ ХИРУРГИЯ», 10-12 декабря Москва 2017г.</li>
document.js
JavaScript:
window.onload = function() {

    function reAnswer(state, title){
        $.ajax ({
            url: "content.php",
            type: "POST",
            data: {page: state, name:title},
            success: function (result) { $(".content").html(result);
             }
        });
    }

    function handlerAnchors() {
        $("ul.nav li a").removeClass('selected');
        $(this).addClass('selected');

        var state = {
            title: this.getAttribute( "title" ),
            url: this.getAttribute( "href", 2 )
        }

        history.pushState( state, state.title, state.url );
        document.title = state.title;
        reAnswer(state.url, state.title);

        return false;
    }

    var anchors = document.getElementsByTagName( 'a' );
    for( var i = 0; i < anchors.length; i++ ) {
        anchors[ i ].onclick = handlerAnchors;
    }

     window.onpopstate = function( e ) {
         $("ul.nav li a").removeClass('selected');
         $('ul.nav li a[href$="' + history.state.url + '"]').addClass('selected');
         document.title = history.state.title;
         reAnswer(history.state.url, history.state.title);
    }
}
Машина:
Локалка "Open Server 5.2.2"
Apache 2.4 ; PHP 7.0 -7.1 x64
 
В этой теме было размещено решение! Перейти к решению.
Последнее редактирование модератором:
Сообщения
317
Реакции
131
Помог
4 раз(а)
Попробуй добавить сешн старт в индекс пхп
 
Сообщения
957
Реакции
1,185
Помог
52 раз(а)
В упор не вижу где тут юзается сессия впринципе.
 
Сообщения
119
Реакции
53
Помог
4 раз(а)
alabamaster1337, Sonyx, .
PHP:
<?php
session_start();
?>
Использовал в index , content, и запиливал в саму страничку которую подгружаю не помогло.
Прикрепил сам сайт м.б у меня руки кривые.
 

Вложения

Сообщения
317
Реакции
131
Помог
4 раз(а)
Sleedney, так в сессию нужно что-то поместить, а пустая сессия ничего и не вернет
 
Сообщения
2,491
Реакции
2,795
Помог
61 раз(а)
Sleedney, старт сессии должен быть до начала любого вывода. Например можно в тот же index.php в самом начале стартовать. Также не закрывайте тег php ?> если файл состоит только из php кода. Часто густо там может содержатся перенос строки, пробел или другие непечатаемые символы, которые пойдут в буфер вывода и не дадут стартануть сессии (если быть точнее отправить заголовок с кукой идентификатора). В коде единственное упоминание старта сессии я нашел только в content.php который как я понял дергается php скриптом по http. И скажу честно: за много лет своей практики я такого еще не видал. Это мощно
Код:
$post = array(
            'page' => ".".$page,
            'name' => $name,
            'password' => 'bar',
            'submit' => TRUE,
        );
       
        $data = http_build_query($post);

        $opts = array(
                  'http' => array(
                      'method' => 'POST',
                      'header' => "Content-type: application/x-www-form-urlencoded\r\nContent-Length: " . strlen($data) . "\r\n",
                      'content' => $data,
                  )
               );

        $context  = stream_context_create($opts);

        $url = $this->siteURL()."/content.php";
        $content = file_get_contents($url,FALSE,$context);

        return $content;
18 Сен 2019
Sleedney, мой вам совет. Возмите какой нибудь фреймворк (а их тисячи) и не городите такие костыли.
 
Сообщения
957
Реакции
1,185
Помог
52 раз(а)
И скажу честно: за много лет своей практики я такого еще не видал. Это мощно
реквайр для слабаков)
Sleedney, кроме объявления старта сессии, где она используется? В чем смысл от сессии, если в нее ничего не сохраняется? Я даже представить не могу что вы туда при текущем наполнении собрались сохранять)
Так же вижу что пытаетесь использовать классы, по ним несколько моментов:
  1. методам объявляйте видимость (public, protected, private)
  2. если юзаем классы - учимся юзать их свойства (глобал фтопку)
остальные пункты стер, т. к. придирок много слишком)
 
Сообщения
317
Реакции
131
Помог
4 раз(а)
Sonyx, так ведь по дефолу public видимость, можно и не писать
 
Сообщения
207
Реакции
420
Помог
10 раз(а)
Все пабликом помечать - плохо.
Вдобавок, по-моему, скоро PHP начнет ругаться на такое
 
Сообщения
119
Реакции
53
Помог
4 раз(а)
Кто батя ? Я Батя )) Всё готово ) И никаких сессий не нужно было. Зачёт сдал.
Всем спасибо за советы много полезного.

Пруф закрепил.
 

Вложения

Статус
В этой теме нельзя размещать новые ответы.

Пользователи, просматривающие эту тему

Сейчас на форуме нет ни одного пользователя.
Сверху Снизу