RewriteRule ломает $ _SESSION - PullRequest
       1

RewriteRule ломает $ _SESSION

1 голос
/ 10 сентября 2010

Все работало нормально, пока я не добавил свой файл .htaccess. Я пытаюсь направить всех своих пользователей на страницу своего профиля. Таким образом, www.darudude.com/user1 направляется к www.darudude.com/userinfo.php?user=user1

Мой файл .htaccess как этот:

RewriteEngine on
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)\?*$ userinfo.php?user=$1 [L,QSA]

Однако с тех пор, как я добавил это, это нарушает мои сеансы. На каждой странице я инициализирую сеанс, а сеансы хранят реферер. Это фрагмент кода, который обрабатывает важную часть.

if(isset($_SESSION['url'])){
     $this->referrer = $_SESSION['url'];
}else{
     $this->referrer = "/index.php";
}
//this echo is used to debug why this thing isn't working!!
echo "<script>alert('".$this->referrer."');</script>";
/* Set current url */
$this->url = $_SESSION['url'] = $_SERVER['PHP_SELF'];

и затем я возвращаюсь на исходную страницу, используя этот фрагмент кода:

header("Location: ".$session->referrer);

Так, например, без файла .htaccess, если я захожу на одну из страниц, все работает, и меня перенаправляют обратно на страницу, с которой я вошел (т. Е. Если я захожу из index.php, меня перенаправляют обратно index.php; если faq.php, меня перенаправляют обратно в faq.php). С файлом .htaccess меня продолжают посылать в /userinfo.php, что наводит меня на мысль, что что-то не так с моим rewriterule

Вот как это должно работать: index.php загружает. $ _SESSION ['url'] установлен в index.php
введена форма входа в систему, чье действие перенаправляет на process.php
process.php, $ session-> referrer устанавливается из $ _SESSION ['url']
После подтверждения входа в систему страницу следует перенаправить с помощью: header («Location:». $ Session-> referrer);

Вот как это изначально работало без проблем.

Однако после создания .htaccess он, кажется, перенаправляет меня на userinfo.php. Я думаю, что это как-то связано с моим правилом.

Есть идеи?

Ответы [ 3 ]

2 голосов
/ 11 сентября 2010

Я не уверен, что понимаю проблему, но используемое вами правило перезаписи, по-видимому, превращает запрос на /index.php в запрос на /userinfo.php?user=/index.php, что может не соответствовать вашему желанию.

0 голосов
/ 11 сентября 2010

Вы можете попробовать войти в систему с помощью AJAX, поэтому вам вообще не придется обновлять страницу.Простой поиск в Google выдает множество результатов, см. Ниже.Даже если вы не используете jQuery (который, как вам кажется, ожидают многие уроки), это все же возможно с базовым Javascript, на самом деле именно так я написал свой сценарий входа в AJAX, прежде чем преобразовать его в jQuery позже.

http://www.google.com/search?q=php+ajax+log-in

0 голосов
/ 10 сентября 2010

Это потому, что вы полагаетесь на $_SERVER['PHP_SELF'], который не включает строку запроса (часть ?user= URI). Это работало раньше, потому что ваши страницы не полагались на строки запроса, чтобы однозначно идентифицировать себя. Вместо этого вы можете использовать $_SERVER['REQUEST_URI'], однако обратите внимание на обстоятельства, когда вы не хотите сохранить строку запроса, и теперь она выполняется.

Кстати, \?* в вашем регулярном выражении RewriteRule работает точно так же, как если бы его там не было.

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