PHP sessions AJAX

138
14 мая 2019, 07:30

Есть файл index.php `

<?php
session_start();
if (isset($_SESSION['privilege'])) {
    $privilege = $_SESSION['privilege'];
}
require_once ('classes/user.php');
$user = new User();
?>
<!DOCTYPE html>
<html>
    <head>
        <title>users.loc</title>
        <meta charset="utf-8">
        <link rel="stylesheet" type="text/css" href="css/style.css">
        <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.1.1/jquery.min.js"></script>
        <script src="https://unpkg.com/sweetalert/dist/sweetalert.min.js"></script>
        <script type="text/javascript" src="js/script.js"></script>
    </head>
    <body>
        <header>
            <h1>Пользователи</h1>

            <div id="menu">
                <nav>
                    <ul id="menu-list">
                        <?php if (!isset($privilege)): ?>
                        <li class="menu-list-item"><a id="toregistration" href="#">Регистрация</a></li>
                        <li class="menu-list-item"><a id="tologin" href="#">Авторизация</a></li>
                        <?php
else: ?>
                        <li class="menu-list-item"><a id="toprofile" href="#">Мой профиль</a></li>
                        <li class="menu-list-item"><a id="toall" href="#">Пользователи</a></li>
                        <li class="menu-list-item"><a id="exit" href="#">Выход</a></li>
                        <?php
endif; ?>
                    </ul>
                </nav>

            </div>
        </header>
           <div id="content">
            </div>
        </body>
        </html>

`

Через AJAX подключаю файл profile.php `

$('#toprofile').click(function() {
        var jqxhr = $.get("../includes/profile.php", {
        })
            .done(function(data) {
                $('#content').html(data);
            });
    });`

Сам файл profile.php

 <div id="register" class="animate form">
                <h2> Профиль </h2>
                <div>
                    <img id="profile_photo" src="../img/img.jpg">
                </div>
                <div>
                <p> 
                    Логин: <?php echo $_SESSION['login'] ?>
                </p>
                <p> 
                    ФИО: <?php echo $_SESSION['name'] ?>
                </p>
                    <p class="signin button"> 
                    <input id ="register_button" type="submit" value="Изменить имя"/> 
                </p>
                </div>
        </div> 

Проблема в том, что файл profile.php не видит сессию, а при попытке session_start() выводит ошибку Cannot start session when headers already sent. Переменные сессии устанавливаются в другом файле и спокойно вызываются в index.php

Answer 1

Вы не можете стартовать сессию, если уже был какой-то вывод на экран. Будь то php-код или сообщение об ошибке - неважно.

Из вопроса не видно, где именно вы пытались стартовать сессию, но причина, скорее всего, в этом. Вам в сообщении об ошибке пишут - headers already sent. А заголовки посылаются только тогда, когда начат вывод на экран.

Для подключения сессии в profile.php начало файла должно выглядеть так

<?php session_start(); ?>
<div id="register" class="animate form">
READ ALSO
Как в PHPWord записать текст в конец файла .docx?

Как в PHPWord записать текст в конец файла .docx?

В переменную $phpWord я запихнул файлКак мне в конец файла добавить новую строку (строки)?

120
Изменение данных продукта в корзине

Изменение данных продукта в корзине

У меня есть два типа продуктов: 1) те которые покупаются на конкретный день 2) стандартные продуктыМне нужно реализовать возможность добавление...

119
Поочерёдный доступ к скрипту php

Поочерёдный доступ к скрипту php

Есть скрипт, когда его запускают 50 человек одновременно, сервак отдаёт 503Т

131
Вставить контакты на сайте через API Joomla

Вставить контакты на сайте через API Joomla

Что есть: Joomla, Созданные контакты в компонентах Что нужно: на странице разместить контакты, телефоны, адреса,карты и только одну форму обратной...

141