Подтвердить что ты не робот

Сессия PHP не сохраняет

У меня это написано в первой строке на каждой странице моего сайта.

include("restd.php");

и restd.php содержит следующие строки:

@session_start();
if(isset($_SESSION['id']))
{
}
else
{
  header("location:index.php");
}

Проблема, с которой я сталкиваюсь, заключается в том, что когда я нажимаю или что-то делаю на своем веб-сайте. он выводит меня из системы и возвращает меня в index.php.

im уверен, что это связано с сеансом. ive попробовал каждую вещь, чтобы избежать этой проблемы, но я использовал restd.php, потому что я не хочу, чтобы кто-то копировал URL-адрес кого-то и вставлял и попадал на веб-сайт.

любой, кто войдет в систему, сможет просматривать только другие страницы. если они не вошли в систему, они будут перенаправлены на index.php

EDIT: и ребята путают то, что все это отлично работает на моем тестовом сервере, который является easyPHP-5.3.8.0, но эта проблема возникает, когда я загружаю все файлы на свой сервер.

4b9b3361

Ответ 1

Каталог сеанса (возможно, /tmp/) не доступен для записи.

Обратитесь к session_save_path(), если он доступен для записи.

if (!is_writable(session_save_path())) {
    echo 'Session path "'.session_save_path().'" is not writable for PHP!'; 
}

Ответ 2

Фактически вы задаете $_SESSION ['id'] на странице...

Что вы здесь делаете:

  • Запустите сеанс и загрузите $_SESSION из обработчика сеанса
  • Проверьте, содержит ли $_SESSION ключ 'id'
  • Перенаправить на index.php, если $_SESSION ['id'] не установлен

Вы действительно делаете это в index.php?

session_start();
$_SESSION['id'] = something;

Ответ 3

вам нужно объявить $_SESSION['id']:

file1.php

session_start();

$_SESSION['id'] = '123'  

file2.php

include 'file1.php'

if(isset($_SESSION['id']))
{

}
else
{
  header("location:index.php");
}

Ответ 4

Я знаю, что это старый поток, но следующее помогло мне с той же проблемой после нескольких часов отчаяния. Найдено по: http://php.net/manual/de/function.session-save-path.php

Я сделал папку рядом с общедоступной html-папкой и разместил эти строки в самой первой точке index.php

Расположение папки сеанса:

/домены/счета/сеанс

расположение index.php

/domains/account/public_html/index.php

Что я поместил в index.php в строке 0:

<?php 
ini_set('session.save_path',realpath(dirname($_SERVER['DOCUMENT_ROOT']) . '/../session'));
session_start();
?>

Надеюсь, это сэкономит вам время.

Ответ 5

Пара вещей:

  • ваш файл include не имеет тегов <?php ?>, поэтому контент не будет оцениваться как PHP

  • Session_start необходимо вызвать, прежде чем вы начнете выводить что-либо. Это тот случай?

Ответ 6

Вы все равно даже не отвечаете, где вы устанавливаете $_SESSION ['id']. $pid = $_SESSION['id'] не задает переменную сеанса. session_start() предшествует ANYTHING session related, он не отображается перед включением.

Ответ 7

У меня была такая же проблема, и я нашел для нее обход. Если кто-нибудь может объяснить, почему сеанс не читается, даже если файл cookie существует, сообщите мне.

<?php
//  logged.php
//  The PHP session system will figure out whether to use cookies or URLs to pass the SID

if(!isset($_COOKIE['PHPSESSID']) && !isset($_GET['PHPSESSID']) && authenticationRoutine(/* Returns true if succesfully authenticated */) ) {
    session_id(uniqid("User--"));
    session_start();
    $_SESSION['id']=session_id();
}

?>



<?php
//  Insecure restd.php (The user can forge a stolen SID cookie or URL GET request, but that is inherent with PHP sessions)

if(!isset($_COOKIE['PHPSESSID']) && !isset($_GET['PHPSESSID']) {header('Location: index.php')}

?>

.

[EDIT]

Несмотря на то, что файл cookie был там, и я запретил запуск нового сеанса, сеанс не читался и не запускался, поэтому никаких переменных сеанса не было. В этом случае я проверяю, был ли сначала запущен сеанс (не используя session_status(), потому что он не существует в PHP 3.5, который по какой-то причине является наиболее распространенным среди хостов). Если в PHP не было запущено ни одного сеанса, я проверяю, было ли это ранее запущено, проверяя переменные cookie и GET. Если идентификатор сеанса был найден, script возобновляет сеанс с этим идентификатором. Если идентификатор отсутствует, пользователь перенаправляется на индекс.

<?php
//  restd.php
if(empty(session_id())) {
    if(isset($_COOKIE['PHPSESSID']) && !empty($_COOKIE['PHPSESSID'])) {session_id($_COOKIE['PHPSESSID']);}
    elseif(isset($_GET['PHPSESSID']) && !empty($_GET['PHPSESSID'])) {session_id($_GET['PHPSESSID']);}
    else {header('Location: index.php'); exit(0);}
    session_start();
}

Ответ 8

Проверьте, может быть, ваш путь сеанса не существует поэтому вы можете сохранить путь к сеансу PHP, используя:

ini_set(' session.save_path','SOME WRITABLE PATH');