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

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

include("restd.php"); 

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

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

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

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

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

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

Solutions Collecting From Web of "Сессия PHP не сохраняет"

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

Проверьте с помощью session_save_path() если он доступен для записи.

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

Фактически вы устанавливаете $ _SESSION ['id'] на странице …

Здесь вы пытаетесь сделать следующее:

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

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

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

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

file1.php

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

file2.php

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

Я знаю, что это старый поток, но следующие помогли мне с той же проблемой после нескольких часов отчаяния. Найдено по адресу : 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(); ?> 

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

Пара вещей:

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

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

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

У меня была такая же проблема, и я нашел для нее обход. Если кто-нибудь может объяснить, почему сеанс не читается, даже если файл 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')} ?> 

,

[РЕДАКТИРОВАТЬ]

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

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

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

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