Заголовок PHP и $ _SESSION - PullRequest
       8

Заголовок PHP и $ _SESSION

1 голос
/ 18 марта 2011

Я сейчас создаю CMS и у меня проблема с сессиями PHP:

  • В любом месте на моем сайте пользователь может запустить CMS, добавив строку запроса к URL ->? Mod = admin
  • ? Mod = admin будет перенаправлять на login.php
  • После аутентификации я бы хотел перенаправить пользователя на страницу, с которой он пришел, с включенными функциями CMS

Для этого я сохраняю URL текущей страницы в сеансе, прежде чем пользователь перейдет в login.php

скрипт url.class.php

function curPageURL() {
 session_start();
 $pageURL = 'http';
 if ($_SERVER["SERVER_PORT"] != "80") {
  $pageURL .= $_SERVER["SERVER_NAME"].":".$_SERVER["SERVER_PORT"].$_SERVER["PHP_SELF"];
 } else {
  $pageURL .= $_SERVER["SERVER_NAME"].$_SERVER["PHP_SELF"];
 }
 $_SESSION['url'] = $pageURL;
}

Сценарий Login.php: если проверка прошла успешно, я запускаю сеанс и пытаюсь перенаправить пользователя на страницу, с которой он пришел:

if($num_rows == 1){
  session_start();
  $_SESSION['username'];
  header('Location: ' . $_SESSION['url']);
}

Я получаю сообщение об ошибке "сеанс уже начался".
Но если я перенаправлю на определенную страницу (домашнюю страницу, например), то все работает нормально. например -> header ('Location: index.php');

Ответы [ 4 ]

1 голос
/ 18 марта 2011

Если это ошибка, которую вы получаете, вам нужно проверить, не начал ли вы сеанс где-то еще.В этом случае вам нужно поставить:

if(!isset($_SESSION)){
    session_start();
}

Вместо того, где вы положили свой обычный session_start ().

1 голос
/ 18 марта 2011

Можете ли вы не просто перенаправить на предыдущую страницу, используя $ _SERVER ['HTTP_REFERER']? *

Что на самом деле происходит, когда вы пытаетесь запустить скрипт в его текущем состоянии?

0 голосов
/ 18 марта 2011

В любом месте на моем сайте пользователь может запустить CMS

Я предполагаю, что вы имеете в виду, что веб-сайт реализован через CMS и что пользователь может получить доступ к расширенным привилегиям / дополнительным функциям на любом этапе, добавив строку запроса.

сохранить URL текущей страницы в сеансе

Эрк.

Это неподходящее место для хранения этой информации - ее следует передавать через URL (или через POST - но это не сработает при перенаправлении):

session_start();
if (!is_auth_for_cms() && $_GET['mod']=='admin') {
     // simplified a bit...
     $comeback='http://' . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'];
     // rewriting the get trigger avoids short circuit looping problems
     $comeback=urlencode(str_replace('mod=admin', 'mod=auth', $comeback));
     header("Location: " 'http://' . $_SERVER['HTTP_HOST'] . "/login.php?backto=$comeback";
}

Оставляя в стороне опечатки в вашем коде, в чем вопрос?

if($num_rows == 1){
  session_start();
  $_SESSION['username'];
  header('Location: ' . $_SESSION['url']);
}

Как вы думаете, что делает третья строка?

0 голосов
/ 18 марта 2011

В url.class.php вы уже начали сеанс?Ваша проблема может заключаться в том, что вы не начали сеанс, и, следовательно, данные сеанса не могут быть сохранены.

В вашем url.class.php попробуйте проверить, что переменные сеанса содержат требуемые значения.*

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...