У меня это написано в первой строке на каждой странице моего сайта.
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, но эта проблема возникает, когда я загружаю все файлы на свой сервер.
Ваш каталог сеанса (возможно, /tmp/
) не доступен для записи.
Проверьте с помощью session_save_path()
если он доступен для записи.
if (!is_writable(session_save_path())) { echo 'Session path "'.session_save_path().'" is not writable for 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(); ?>
Надеюсь, это сэкономит вам время.
Пара вещей:
ваш файл include не имеет тегов <?php ?>
, поэтому контент не будет оцениваться как PHP
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');